2013-02-04 16 views
6

Sono nuovo per la primavera e ho un problema. Ho un modulo che viene utilizzato per inviare informazioni al controller. Non ho bisogno o vogliono avere un chicco di backup del modulo così ho lasciato l'attributo commandName nella forma vuota come questa:Modulo di primavera senza comando Nome

<form:form action="getReportFile.html" method="post"> 
      <table> 
       <tr> 
        <td><form:label path="field1">Field1:</form:label></td> 
       </tr> 
       <tr> 
        <td><form:select path="field1" items="${FieldMap}" />       
        </td> 
       </tr> 
       <tr> 
        <td><form:label path="field2">Field2:</form:label></td> 
       </tr> 
       <tr> 
        <td><form:input path="field2"/></td> 
       </tr> 
       <tr> 
        <td><input type="submit" value="Submit" /></td> 
       </tr> 
      </table> 
     </form:form> 

sto ottenendo il seguente errore:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute 

Potrei vedere here che quando non dai un valore a commandName utilizza il valore predefinito 'command', ma poi, Devo configurare qualcos'altro? dovrei inserire un bean 'command' nello dispatcher-servlet.xml? Come sarebbe quel fagiolo?

Voglio solo un modulo per inviare le informazioni al controller. Devo davvero creare un bean per supportarlo?

+0

Beh, in realtà l'altra domanda è un duplicato di questo, come questo è stato chiesto prima :) @SotiriosDelimanolis –

risposta

8

Se non è necessario un oggetto comando, evitare il modulo Spring e utilizzare semplicemente un modulo HTML.

Quindi, modificare

<form:form action="getReportFile.html" method="post"> 
    . 
    . 
    . 
</form:form> 

a

<form action="getReportFile.html" method="post"> 
    . 
    . 
    . 
</form> 

L'oggetto comando non è infatti obbligatoria. È obbligatorio solo se si utilizza il modulo Spring come <form:form></form:form> utilizzando la seguente libreria.

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 

che permette di ricevere i parametri di richiesta utilizzando il metodo request.getParameter("paramName"), se si utilizza un modulo HTML.


if you don't have a form backing bean, you can't use the Spring tag since it does require one! Your "path" attribute on that tag is supposed to specify the path to the model bean's property for data binding.

http://forum.springsource.org/showthread.php?83532-how-to-have-form-without-command-object&p=279807#post279807

+0

grazie! Davvero helpul –

+0

Prego. Se hai bisogno di convalida lato server usando qualcosa come 'HibernateValidator', allora devi avere un bean di supporto come descritto da @jfrank nella sua risposta. C'era una volta la mia esigenza di evitare un backing bean (un backing bean non era davvero necessario perché tutto in una pagina JSP era gestito solo da Spring JSON). – Lion

+1

così semplice ma apparentemente così raro. Ogni tutorial utilizza il modulo: modulo, che porta un sacco di bagaglio vincolante che non viene spesso spiegato. Non penso sia raro volere un modulo che non si riferisce a un modello (un modulo di ricerca, un modulo di contatto per esempio), ma quasi nessun tutorial lo copre. – mmcrae

3

Non so se è possibile creare un modulo senza backing bean in Spring MVC, ma penso che non otterrete molto da Spring MVC senza utilizzare un bean. I tag del modulo che stai utilizzando (come form: input) vengono associati alle proprietà del backing bean e questo ti consente di allegare elementi come la convalida, i messaggi di errore, la conversione dei tipi, ecc. Il tuo intento è semplicemente di inviare il modulo a un controller Spring e gestisci tutti i campi del modulo sul server con codice come "request.getParameter ('field1')"? Quindi suggerirei semplicemente usando un semplice modulo HTML.

-1

Basta aggiungere CommandName attribuiscono a formare tag in primavera.

<form:form method="post" action="save.web" commandName="person"> 
Problemi correlati