Pergunta

Seguindo as instruções de Primavera Fonte e da Primavera livro em Ação, estou tentando configurar Spring MVC de uma forma que a configuração minimiza xml. No entanto, segundo Primavera Fonte isto é como você configurar o ControllerClassNameHandlerMap

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

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

O que me parece ser completamente inútil, pois é realmente simples de usar os manipuladores de apenas definir os grãos manualmente, como é aproximadamente a mesma quantidade de XML.

Agora, a Primavera livro em Ação faz parecer que tudo que você precisa é a primeira linha desse bloco de código para usar o ControllerClassNameHandlerMapping, o que tornaria muito mais útil. No entanto, eu ainda não foram capazes de chegar a este trabalho.

Qualquer pessoa pode com Spring experiência ajuda-me para fora?

Foi útil?

Solução

Há realmente duas coisas diferentes acontecendo aqui:

  1. o mapeamento entre URLs e controladores
  2. a definição dos controladores como Spring beans

Para # 1, se você definir o ControllerClassNameHandlerMapping como você fez, que cuida do mapeamento de URL para controlador. Por exemplo, http://example.com/context/home -> HomeController

Para # 2, você pode definir o feijão controlador como você fez. Ou você pode ir para o caminho de usar as anotações 2,5 de estilo Primavera para @Controllers e auto-fiação, o que elimina a necessidade de definições de feijão XML. Ou não, a escolha é até você.

O que você evitar usando ControllerClassNameHandlerMapping está tendo para mapear explicitamente todas as suas URLs potenciais para Controllers. Temos utilizado este sucesso.

Uma outra coisa que você pode querer usar é o 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"/>

Nós também usamos o 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>

Outras dicas

Eu não acho que usando ControllerClassNameHandlerMapping é uma prática boa engenharia, como é realmente impedi-lo de fazer o trabalho refatoração na classe java Controller.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top