Domanda

Seguendo le indicazioni da Spring Source e il libro Spring in Action, sto cercando di impostare Spring MVC in modo da ridurre al minimo la configurazione XML. Tuttavia, secondo Spring Source, è così che si imposta ControllerClassNameHandlerMap

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

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

Il che mi sembra del tutto inutile, poiché in realtà è più semplice utilizzare i gestori per impostare manualmente i bean, dato che si tratta della stessa quantità di XML.

Ora il libro Spring in Action fa sembrare che tutto ciò di cui hai bisogno sia la prima riga da quel blocco di codice per usare ControllerClassNameHandlerMapping, che lo renderebbe molto più utile. Tuttavia, non sono ancora riuscito a farlo funzionare.

Qualcuno con esperienza Spring può darmi una mano?

È stato utile?

Soluzione

In realtà ci sono due cose diverse in corso qui:

  1. il mapping tra URL e controller
  2. la definizione di controller come bean Spring

Per # 1, se si definisce ControllerClassNameHandlerMapping come hai fatto, questo si occupa della mappatura da URL a controller. Ad esempio, http://example.com/context/home - & Gt; HomeController

Per # 2, puoi definire i bean del controller come hai fatto. Oppure puoi seguire il percorso dell'utilizzo delle annotazioni in stile Spring 2.5 per @Controller e il cablaggio automatico, eliminando la necessità di definizioni di bean XML. O no, la scelta spetta a te.

Quello che eviti usando ControllerClassNameHandlerMapping è dover mappare esplicitamente tutti i tuoi potenziali URL su Controller. Lo abbiamo usato con successo.

Un'altra cosa che potresti voler usare è 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"/>

Utilizziamo anche 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>

Altri suggerimenti

Non credo che usare ControllerClassNameHandlerMapping sia una buona pratica ingegneristica, in quanto ti impedisce davvero di fare lavori di refactoring sulla classe java Controller.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top