【问题标题】:Locale in Spring MVCSpring MVC 中的语言环境
【发布时间】:2014-09-15 11:56:18
【问题描述】:

我正在尝试向我们的 Spring MVC 应用程序添加国际化和本地化支持。

在我的 dispatcherservlet.xml 中,我使用 DefaultAnnotationHandlerMapping 进行映射

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >
    <property name="interceptors">
       <list>
        <ref bean="localeChangeInterceptor" />
       </list>
    </property>
</bean>

在我的 web.xml 中

<web-app>
<display-name>Archetype Created Web Application</display-name>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
     <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/dispatcherservlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>

我的控制器

@Controller
@RequestMapping(value = "/account")
public class AccountController {

    @RequestMapping(method = RequestMethod.GET)
    public String index() {
        return "index";
    }

    @RequestMapping(value = "/register", method = RequestMethod.GET)
    public String showForm(Map<String, Object> mm) {
        mm.put("subcriber", new Sucriber());
        return "register";
    }

    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public String register(@ModelAttribute("subcriber") Sucriber sucriber,BindingResult result,Map<String, Object> mm) {

        SucriberValidator sucriberValidator = new SucriberValidator();
        sucriberValidator.validate(sucriber, result);

        if (result.hasErrors()) {
            return "register";
        } else {
            return "success";
        }
    }
}

当我去 myhost/myhost:myport/myproject 时,一切正常 但 DefaultAnnotationHandlerMapping 类已弃用。 在 Spring 3.2 中支持 RequestMappingHandlerMapping。所以我使用类RequestMappingHandlerMapping。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" >
    <property name="interceptors">
       <list>
        <ref bean="localeChangeInterceptor" />
       </list>
    </property>
</bean>

当我转到 myhost/myhost:myport/myproject 时,出现错误

HTTP 状态 500 - 处理程序 [public java.lang.String controller.AccountController.index()] 没有适配器:DispatcherServlet 配置需要包含支持此处理程序的 HandlerAdapter

感谢您的帮助

【问题讨论】:

  • 当我用 RequestMappingHandlerMapping 替换 DefaultAnnotationHandlerMapping 时出现问题。我不知道为什么。我将 @RequestMapping(value = "/",method = RequestMethod.GET) 添加到索引方法,但结果仍然是 HTTP 状态 404
  • 如果您使用RequestMappingHandlerMapping,还需要添加RequestMappingHandlerAdapter。但是使用&lt;mvc:annotation-driven /&gt; 然后&lt;mvc:interceptors /&gt; 注册拦截器更容易。

标签: java spring spring-mvc


【解决方案1】:

你可以使用 ControllerClassNameHandlerMapping

<bean
    class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
        p:paramName="lang" />
</mvc:interceptors>

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="en" />
</bean>

<!-- Most controllers will use the ControllerClassNameHandlerMapping above, 
    but for the index controller we are using ParameterizableViewController, 
    so we must define an explicit mapping for it. -->
<bean id="urlMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="index.html">indexController</prop>
        </props>
    </property>
</bean>

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

<!-- The index controller. -->
<bean name="indexController"
    class="org.springframework.web.servlet.mvc.ParameterizableViewController"
    p:viewName="index" />

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 2015-08-03
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多