2009-05-12 8 views
1

Vermutlich fehlt hier etwas völlig offensichtlich, aber hier geht. Ich fange mit Spring MVC an. Ich habe einen Formular-Controller, um eingehende Anfragen an /share/edit.html zu bearbeiten. Als ich diese URL aus meinem Browser getroffen, erhalte ich folgende Fehlermeldung:Feder MVC - Form Mapping

The requested resource (/inbox/share/share/edit) is not available. 

Hier ist mein application-mvc.xml:

<bean id="publicUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > 
     <property name="mappings" > 
      <value> 
       /share/edit.html=shareFormController 
       /share/list.html=shareController 
       /share/view.html=shareController 
       /folders.json=foldersController 
       /studies.json=studiesController 
      </value> 
     </property> 
    </bean> 


<bean id="internalPathMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver" /> 

<bean id="shareFormController" class="com.lifeimage.lila.controller.ShareFormController" /> 
<bean id="shareController" class="com.lifeimage.lila.controller.ShareController" > 
    <property name="methodNameResolver" ref="internalPathMethodNameResolver" /> 
</bean> 

und meine Form Controller:

public class ShareFormController extends SimpleFormController { 

    public ShareFormController() { 
     setCommandClass(Share.class); 
    } 

    @Override 
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) 
      throws Exception { 

     //controller impl... 

    } 



} 
+0

Interessanterweise macht die Änderung der URL-Zuordnung von /share/edit.html zu/edit.html das Mapping funktioniert. Aber das macht keinen Sinn; Ich würde hier keine anderen Formen haben können. –

Antwort

1

Ich denke, ich habe dieses Problem gelöst. Es gab zwei Probleme:

1) Implementierungen von SimpleFormController erfordern eine Formular- und Erfolgsansicht; was ich hier nicht konfiguriert hatte. Da dies ein Server-Methode für einen AJAX-Client ist, habe ich Ansicht, die einen Feder JSON wie folgt:

<?xml version="1.0" encoding="UTF-8"?> 

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd“ default-lazy-init = "false" default-autowire = "no" default-Abhängigkeit-check = "none">

<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"> 
     <property name="jsonErrors"> 
      <list> 
        <ref bean="statusError" /> 
        <ref bean="modelflagError" /> 
      </list> 
    </property> 
</bean> 

<bean name="statusError" 
     class="org.springframework.web.servlet.view.json.error.HttpStatusError"> 
     <property name="errorCode"><value>311</value></property> 
</bean> 
<bean name="modelflagError" 
     class="org.springframework.web.servlet.view.json.error.ModelFlagError"> 
     <property name="name"><value>failure</value></property> 
     <property name="value"><value>true</value></property> 
</bean> 

, die für alle Controller verwendet werden kann, die JSON zurückgeben.

2) Ich wechselte von einem SimpleURLHandlerMapping zu ControllerClassNameHandlerMapping und stützte mich auf Spring Namenskonventionen (ControllerClassName/method.html), die das Routing-Problem behoben. Könnte keine langfristige Lösung sein, aber hat mich durch die Aufgabe gebracht.

0

Hast du deine Protokollausgabe überprüft? Spring MVC ist in der Regel ziemlich ausführlich in was es ausgibt.

Auch die von Ihnen gepostete URL (/inbox/share/share/edit) scheint nicht mit der von Ihnen konfigurierten übereinzustimmen (/share/edit.html).

+0

Ich denke, das ist das Problem. /inbox/share/edit.html ist die URL, die ich versuche, den Controller zu hören. Warum sollte sich der Pfadname wiederholen? –

+0

Nicht sicher. Könnte ein Problem mit der Zuordnung von URL zu Controller des Problems mit dem Auflösen einer Ansicht sein. Wirklich, überprüfen Sie die Protokolle. –

1

Sie sollten sich Ihren View Resolver anschauen. Stellen Sie sicher, dass der logische Name in Ihrem Controller so aufgelöst wird, wie Sie es für richtig halten. Sieht aus wie der Name, zu dem es aufgelöst wird, existiert zur Zeit nicht

-1

@ jordan002 Wenn ich alle Reifen sehe, die Sie springen mussten, um Ihre Aufgabe zu erfüllen, fühle ich mich verpflichtet, ein sehr leistungsfähiges Java MVC-Framework zu teilen, das viel weniger Konfiguration erfordert. Der Rahmen heißt Induktion, lesen Sie den Artikel Induktion vs Frühling MVC, http://www.inductionframework.org/induction-vs-spring-mvc.html