从 URL Spring 中删除 GET 参数 4
removing GET parameters from URL Spring 4
我的 spring 应用程序安装了多语言,我不希望 'lang' 参数出现在 URL 中(我使用 sessionLocaleResolver 或cookieLocaleResolver/neither 有效)。
我已经搜索了数小时以找到解决此问题的方法,尽管显然它应该已经与我所做的一起工作。这是我的代码:
视图(welcome.jsp):
Language : <a href="?lang=en">English</a>|<a href="?lang=fr_FR">Francais</a>|<a href="?lang=ro_RO">Romanian</a>
<h2>welcome.springmvc : <spring:message code="welcome.text" text="default text" /></h2>
我的servlet.xml
<!-- Multi-Language / Localization Setup -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:annotation-driven ignore-default-model-on-redirect="true" />
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:lang.files/welcome</value>
<!-- <value>classpath:messages2</value> -->
</list>
</property>
<property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="en" />
<property name="cookieName" value="lang" />
<property name="cookieMaxAge" value="60000" />
<property name="cookiePath" value="/" />
</bean>
我的控制器代码 - 请注意,当我单击 link 更改语言时,我停留在同一页面。因为理想情况下它会是一个下拉菜单,我会留在同一页面
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "<br/ ><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial</h3></div><br />";
ModelAndView mv = new ModelAndView();
// ModelAndView mv = new ModelAndView(new
// RedirectView("welcome.do", true, true, true));
RedirectView view = new RedirectView("/welcome", true);
view.setExposeModelAttributes(false);
mv.setView(view);
mv.addObject("message", message);
mv.addObject("activities", activityService.getAll());
mv.addObject("act", activityService.getR());
return new ModelAndView(view);
}
结果是“404”,表示未找到 'localhost/myapp/welcome'。
这个控制器终于可以工作了,但是在 URL 中添加了 'lang' 参数:
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "<br/ ><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial</h3></div><br />";
ModelAndView mv = new ModelAndView();
mv.addObject("message", message);
mv.addObject("activities", activityService.getAll());
mv.addObject("act", activityService.getR());
return mv;
}
请帮忙。
谢谢:)
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "<br/ ><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial</h3></div><br />";
ModelAndView mv = new ModelAndView();
// ModelAndView mv = new ModelAndView(new
// RedirectView("welcome.do", true, true, true));
RedirectView view = new RedirectView("/welcome", true);
view.setExposeModelAttributes(false);
mv.setView(view);
mv.addObject("message", message);
mv.addObject("activities", activityService.getAll());
mv.addObject("act", activityService.getR());
return new ModelAndView(view);
}
当您一遍又一遍地重定向到 /welcome 时,此代码会导致无限循环。
此外,如果您有一个 link,例如 <a href="?lang=en">English</a>
,当您点击它时,该参数将始终出现在 url 中。
实现您想要的目标的最简单方法(不是最好的方法)是创建另一个控制器方法,例如
@RequestMapping("/changeLocale")
public ModelAndView changeLocale() {
RedirectView redirectView = new RedirectView("/welcome");
redirectView.setExposePathVariables(false);
return new ModelAndView(redirectView);
}
而 link 看起来像
<a href="/changeLocale?lang=en">English</a>|<a href="/changeLocale?lang=fr_FR">Francais</a>|<a href="/changeLocale?lang=ro_RO">Romanian</a>
我的 spring 应用程序安装了多语言,我不希望 'lang' 参数出现在 URL 中(我使用 sessionLocaleResolver 或cookieLocaleResolver/neither 有效)。 我已经搜索了数小时以找到解决此问题的方法,尽管显然它应该已经与我所做的一起工作。这是我的代码:
视图(welcome.jsp):
Language : <a href="?lang=en">English</a>|<a href="?lang=fr_FR">Francais</a>|<a href="?lang=ro_RO">Romanian</a>
<h2>welcome.springmvc : <spring:message code="welcome.text" text="default text" /></h2>
我的servlet.xml
<!-- Multi-Language / Localization Setup -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:annotation-driven ignore-default-model-on-redirect="true" />
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:lang.files/welcome</value>
<!-- <value>classpath:messages2</value> -->
</list>
</property>
<property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="en" />
<property name="cookieName" value="lang" />
<property name="cookieMaxAge" value="60000" />
<property name="cookiePath" value="/" />
</bean>
我的控制器代码 - 请注意,当我单击 link 更改语言时,我停留在同一页面。因为理想情况下它会是一个下拉菜单,我会留在同一页面
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "<br/ ><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial</h3></div><br />";
ModelAndView mv = new ModelAndView();
// ModelAndView mv = new ModelAndView(new
// RedirectView("welcome.do", true, true, true));
RedirectView view = new RedirectView("/welcome", true);
view.setExposeModelAttributes(false);
mv.setView(view);
mv.addObject("message", message);
mv.addObject("activities", activityService.getAll());
mv.addObject("act", activityService.getR());
return new ModelAndView(view);
}
结果是“404”,表示未找到 'localhost/myapp/welcome'。
这个控制器终于可以工作了,但是在 URL 中添加了 'lang' 参数:
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "<br/ ><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial</h3></div><br />";
ModelAndView mv = new ModelAndView();
mv.addObject("message", message);
mv.addObject("activities", activityService.getAll());
mv.addObject("act", activityService.getR());
return mv;
}
请帮忙。 谢谢:)
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "<br/ ><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial</h3></div><br />";
ModelAndView mv = new ModelAndView();
// ModelAndView mv = new ModelAndView(new
// RedirectView("welcome.do", true, true, true));
RedirectView view = new RedirectView("/welcome", true);
view.setExposeModelAttributes(false);
mv.setView(view);
mv.addObject("message", message);
mv.addObject("activities", activityService.getAll());
mv.addObject("act", activityService.getR());
return new ModelAndView(view);
}
当您一遍又一遍地重定向到 /welcome 时,此代码会导致无限循环。
此外,如果您有一个 link,例如 <a href="?lang=en">English</a>
,当您点击它时,该参数将始终出现在 url 中。
实现您想要的目标的最简单方法(不是最好的方法)是创建另一个控制器方法,例如
@RequestMapping("/changeLocale")
public ModelAndView changeLocale() {
RedirectView redirectView = new RedirectView("/welcome");
redirectView.setExposePathVariables(false);
return new ModelAndView(redirectView);
}
而 link 看起来像
<a href="/changeLocale?lang=en">English</a>|<a href="/changeLocale?lang=fr_FR">Francais</a>|<a href="/changeLocale?lang=ro_RO">Romanian</a>