Question

Suivez les instructions de Spring Source et le livre Spring in Action, j'essaie de configurer Spring MVC de manière à minimiser la configuration XML. Cependant, selon Spring Source, vous configurez le ControllerClassNameHandlerMap

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean id="viewShoppingCart" class="x.y.z.ViewShoppingCartController">
    <!-- inject dependencies as required... -->
</bean>

Ce qui me semble complètement inutile, car il est en fait plus simple d'utiliser les gestionnaires pour définir les beans manuellement, car il s'agit de la même quantité de XML.

Maintenant, le livre Spring in Action donne l’impression que tout ce dont vous avez besoin est la première ligne de ce bloc de code pour utiliser ControllerClassNameHandlerMapping, ce qui le rendrait beaucoup plus utile. Cependant, je n'ai pas encore réussi à faire en sorte que cela fonctionne.

Quelqu'un ayant l'expérience du printemps peut-il m'aider?

Était-ce utile?

La solution

Il y a en fait deux choses différentes qui se passent ici:

  1. le mappage entre les URL et les contrôleurs
  2. la définition des contrôleurs comme haricots de printemps

Pour n ° 1, si vous définissez le ControllerClassNameHandlerMapping comme vous l'avez fait, le mappage URL-à-contrôleur est pris en charge. Par exemple, http://example.com/context/home - & Gt; HomeController

Pour le n ° 2, vous pouvez définir les beans du contrôleur comme vous l'avez fait. Ou bien, vous pouvez utiliser les annotations de style Spring 2.5 pour les @Controllers et le câblage automatique, ce qui élimine le besoin de définitions de bean XML. Ou non, le choix vous appartient.

Ce que vous évitez en utilisant ControllerClassNameHandlerMapping, c'est d'avoir explicitement mappé toutes vos URL potentielles sur des contrôleurs. Nous l'avons utilisé avec succès.

Une autre chose que vous pouvez utiliser est le DefaultRequestToViewNameTranslator:

<!-- Generates view names based on the request url (e.g. "/home.htm" => "home", "/user/list.htm" => "user/list", etc.) -->
<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/>

Nous utilisons également le UrlBasedViewResolver:

<!-- Maps view names to tiles view definitions files.  E.g., "home" => "home", etc.  -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>

Autres conseils

Je ne pense pas que l'utilisation de ControllerClassNameHandlerMapping soit une bonne pratique d'ingénierie, car elle vous empêche réellement d'effectuer un travail de refactoring sur la classe Java Controller.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top