2013-05-28 9 views
5

Per qualche motivo non riesco a risolvere questo problema, anche dopo aver esaminato più esempi qui.Spring MVC Né BindingResult né semplice oggetto di destinazione per nome bean

Sto cercando di gestire una forma utilizzando Spring 3 MVC, ma sto ottenendo il seguente errore:

Neither BindingResult nor plain target object for bean name 'reverseString' available as request attribute 

Così sto tipo di ottenere quello che è il problema qui, ma non sono riuscito a risolverlo. Ecco il metodo nel mio

classe ReverseController che si estende SimpleFormController:

protected ModelAndView onSubmit(HttpServletRequest request, 
     HttpServletResponse response, Object command, BindException errors) 
     throws Exception { 
    ReverseString revString = (ReverseString) command; 
    ModelAndView mav = new ModelAndView(); 
    ModelMap map = new ModelMap(); 
    map.addAttribute("reverseString", revString); 
    mav.addAllObjects(map); 
    return mav; 
} 

mia app-servlet.xml definisce il controller come segue:

<bean name="/reverse.app" class="ReverseController"> 
    <property name="commandName" value="reverseString"></property> 
    <property name="commandClass" value="ReverseString" /> 
    <property name="successView" value="reverseResult" /> 
    <property name="formView" value="reverse" /> 
</bean> 

questa è la forma nella mia inverso. jsp:

<form:form method="POST" modelAttribute="reverseString" action="handleForm"> 
<form:errors path="*" cssClass="errorblock" element="div" /> 
    <table> 
     <tr> 
      <td>String to be reversed:</td> 
      <td><form:input path="stringToReverse" /> 
      </td> 
      <td><form:errors path="stringToReverse" cssClass="error" /> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="3"><input type="submit" /></td> 
     </tr> 
    </table> 
</form:form> 

E questo è ciò che viene definito nel mio web.xml:

<web-app> 
    <display-name>Spring Reverse String</display-name>  
    <welcome-file-list> 
     <welcome-file>reverse.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>app</servlet-name> 
     <servlet-class>Dispatcher</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>app</servlet-name> 
     <url-pattern>*.app</url-pattern> 
    </servlet-mapping> 
    <context-param> 
    <param-name>contextConfigLocation</param-name>   
    <param-value>/WEB-INF/app-servlet.xml</param-value> 
    </context-param> 
    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
</web-app> 

E, infine, questo è il mio oggetto ReverseString:

public class ReverseString { 

public String stringToReverse; 
public String reversedString; 

public ReverseString(String rawString) { 
    this.reversedString = reverseString(stringToReverse); 
} 

public String getStringToReverse() { 
    return stringToReverse; 
} 

public void setStringToReverse(String stringToReverse) { 
    this.stringToReverse = stringToReverse; 
} 

public String reverseString(String rawString) { 
    if(rawString == null || rawString.length() <= 1) return rawString; 
    return reverseString(rawString.substring(1)) + rawString.charAt(0); 
} 

}

+0

Hai combinato i concetti Spring MVC 2.xe 3.x? - per favore pubblica la classe di controller completa. – Ralph

risposta

8

Nel file reverse.jsp, è stato aggiunto modelAttribute come reverseString. Quindi, prima di caricare reverse.jsp, cercherà il tuo oggetto ReverseString.java.

È sufficiente aggiungere l'oggetto ReverseString.java nell'ambito della richiesta del metodo del controller da cui si sposta l'utente a reverse.jsp.

ad es.

@RequestMapping(value = "/getReverseStringForm") 
    public String cmLogin(Model model) { 
    model.addAttribute(new ReverseString()); 
    return "reverse"; 
    } 
+0

Ok, ora ho aggiunto questo. @RequestMapping (value = "/reverse.html", method = RequestMethod.GET) \t public String SimpleForm (modello Model) { \t \t modello.addAttribute (new ReverseString()); \t \t return "reverse"; \t} Invece di modelAttribute ho solo commandName = "reverseString" sul mio modulo reverse.jsp. Sto ancora ricevendo lo stesso errore. – mgerstner

0

provare ad aggiungere @ModelAttribute("reverseString") nei parametri del metodo onSubmit.

protected ModelAndView onSubmit(HttpServletRequest request, 
     HttpServletResponse response, @ModelAttribute("reverseString") ReverseString revString, BindException errors) 
     throws Exception 
1

Come ho scoperto per me stesso questa eccezione la maggior parte dei casi appare quando il percorso del controller è sbagliato. O errore nella sintassi. Quindi, controlla attentamente se tutti i collegamenti in jsp e i percorsi sono corretti. Perché anche '/' può essere motivo di eccezione.

0

Per me questo errore è stato risolto dichiarando

@ModelAttribute("person") 
public Person createFormModelAttribute() { 
    return new Person(); 
} 

nel controller. E anche su jsp, faccio riferimento agli attributi del modello facendo riferimento al nome della classe:

<form:input path="person.firstName" /> 
Problemi correlati