2010-11-15 5 views
1

J'ai tous les jars dans le cadre Spring 3 sur mon chemin de classe et je voulais ajouter Spring 3 mvc à ma config app. À l'origine, j'avais le XML suivant.Problème utilisant Spring 3 MVC

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd 


    <context:annotation-config/> 
    <bean class="com.apppackage.app.config.AppContextConfig" /> 

    <!-- Autoscan for @Controller type controllers --> 
    <context:component-scan base-package="com.apppackage.app.controller" /> 

Ceci est juste un extrait de l'information pertinente. Mon application a bien fonctionné avec le XML ci-dessus, mais j'ajouté Spring 3 MVC dans la configuration avec les modifications suivantes:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:annotation-config/> 

    <mvc:annotation-driven /> 
    <bean class="com.apppackage.app.config.AppContextConfig" /> 

    <!-- Autoscan for @Controller type controllers --> 
    <context:component-scan base-package="com.apppackage.app.controller" /> 

Maintenant, j'ai des problèmes sur mon application. Le printemps ne semble pas être des haricots Autowiring qu'il était avant. Je suis également obtenir l'erreur suivante sur mes contrôleurs:

No adapter for handler [[email protected]]: Does your handler implement a supported interface like Controller? 
+1

Qu'est-ce que cela signifie « pas le câblage des ressources »? – axtavt

+0

Désolé, j'ai mis à jour cette déclaration. J'espère que c'est clair maintenant. – stevebot

+0

L'erreur mentionne 'LoginController'. Alors montrez-nous 'LoginController'. – skaffman

Répondre

1

Lorsque vous ajoutez <mvc:annotation-driven /> à votre contexte, vous désactiver efficacement le soutien pour la Ancien- style Controller hiérarchie de types.

Les messages d'erreur me suggèrent que LoginController n'est pas un contrôleur annoté, mais est un sous-type de l'interface Controller.

Si vous ne souhaitez pas refactoriser LoginController, alors supprimez <mvc:annotation-driven /> de votre contexte. Sauf si vous utilisez la validation JSR-303 ou la sérialisation JSON, vous n'en avez pas besoin

2

Mon snipplet de travail pour le printemps 3 MVC

<beans xmlns="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:context="http://www.springframework.org/schema/context" 
      xmlns:tx="http://www.springframework.org/schema/tx" 
      xmlns:p="http://www.springframework.org/schema/p" 
      xmlns:mvc="http://www.springframework.org/schema/mvc" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd 
           http://www.springframework.org/schema/mvc 
           http://www.springframework.org/schema/mvc/spring-mvc.xsd 
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context-3.0.xsd 
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 
+0

Salut gennad, ça vous dérange d'expliquer ce que ça fait exactement en faisant un [edit] à votre réponse? Comment cet entête de beans aide-t-il? Je vous remercie! – jmort253

3

En plus de la réponse de skaffman: vous pouvez activer les anciens contrôleurs sans supprimer <mvc:annotation-driven> en déclarant des mappages de gestionnaire et des adaptateurs de gestionnaire de style ancien manuellement:

<bean class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> 
<bean class = "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> 

Explication:

Quand DispatcherServlet ne peut pas trouver HandlerMapping s et HandlerAdapter s déclarés dans le contexte, il enregistre les correspondances par défaut (BeanNameUrlHandlerMapping et DefaultAnnotationHandlerMapping) et les adaptateurs (HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter et AnnotationMethodHandlerAdapter), donc dans un cas simple tout fonctionne sans configuration explicite. Toutefois, si vous déclarez explicitement certains mappages ou adaptateurs, les valeurs par défaut ne sont pas appliquées. Par conséquent, si vous avez besoin d'autres mappages et adaptateurs, vous devez également les déclarer explicitement.

Maintenant, <mvc:annotation-driven> déclare DefaultAnnotationHandlerMapping et AnnotationMethodHandlerAdapter explicitement, désactivant efficacement les autres mappages et adaptateurs par défaut, vous devez donc les déclarer manuellement.

1

Inspirée par la réponse de axtavt, j'ai enlevé cela de ma config mvc et qui m'a passé le « Aucun adaptateur pour gestionnaire .. » Erreur:

<bean id="annotationMapper" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">