Reputation: 2549
I am trying to add Internationalization and Localization support to our Spring MVC application.
In my dispatcherservlet.xml, I use DefaultAnnotationHandlerMapping
for mapping
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
in my 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>
my controller
@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";
}
}
}
When I go to myhost/myhost:myport/myproject , every thing ok
but the class DefaultAnnotationHandlerMapping
is Deprecated.
in Spring 3.2 in favor of RequestMappingHandlerMapping
. So I use class RequestMappingHandlerMapping
.
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" >
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
When I go to myhost/myhost:myport/myproject, I get the error
HTTP Status 500 - No adapter for handler [public java.lang.String controller.AccountController.index()]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
Thank for any help
Upvotes: 0
Views: 1696
Reputation:
You can use 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" />
Upvotes: 1