2013-02-04 4 views
6

Ich bin neu in Spring, und ich habe ein Problem. Ich habe ein Formular, das verwendet wird, um Informationen an den Controller zu senden. Ich brauche oder will keinen Bean die Form Sicherung haben, damit ich in Form leer wie dies das commandName Attribut links:Spring form ohne commandName

<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> 

Ich erhalte die folgende Fehlermeldung:

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

Ich könnte here sehen, dass, wenn Sie commandName keinen Wert geben, verwendet es die Standardeinstellung 'command', aber dann Muss ich noch etwas konfigurieren? sollte ich eine 'command' Bohne in die dispatcher-servlet.xml setzen? Wie wäre diese Bohne?

Ich möchte nur ein Formular, um die Informationen an den Controller zu senden. Muss ich wirklich eine Bohne erstellen, um es zu unterstützen?

+0

Nun, eigentlich die andere Frage ist ein Duplikat dieser, wie dieses vor :) @SotiriosDelimanolis –

Antwort

8

Wenn Sie überhaupt kein Befehlsobjekt benötigen, vermeiden Sie das Spring-Formular und verwenden Sie einfach ein HTML-Formular.

So ändern

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

zu

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

Das Objekt Befehl in der Tat nicht zwingend erforderlich ist. Es ist nur erforderlich, wenn Sie das Spring-Formular wie <form:form></form:form> mit der folgenden Bibliothek verwenden.

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

Sie haben die Anfrageparameter mit der request.getParameter("paramName") Methode erhalten, wenn Sie ein HTML-Formular verwenden.


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

Dank gefragt wurde! Wirklich helpul –

+0

Gern geschehen. Wenn Sie eine serverseitige Validierung mit etwas wie "HibernateValidator" benötigen, dann müssen Sie eine Backing-Bean haben, wie von @jfrank in seiner Antwort beschrieben. Es war einmal auch meine Anforderung, eine Backing-Bean zu vermeiden (eine Backing-Bean war in der Tat nicht erforderlich, da alles auf einer JSP-Seite nur vom Spring-JSON gehandhabt wurde). – Lion

+1

so einfach und doch so ungewöhnlich. Jedes Tutorial verwendet form: form, das viel Gepäck mit sich bringt, das nicht oft erklärt wird. Ich denke nicht, dass es ungewöhnlich ist, ein Formular zu haben, das sich nicht auf ein Modell bezieht (ein Suchformular, ein Kontaktformular zum Beispiel), aber fast kein Tutorial deckt es ab. – mmcrae

3

Ich weiß nicht, ob es möglich ist, ein Formular ohne Backing Bean in Spring MVC zu erstellen, aber ich denke, Sie werden nicht viel aus Spring MVC ohne Verwendung einer Bohne bekommen. Diese Form-Tags, die Sie verwenden (wie form: input), werden an die Eigenschaften der Backing-Bean gebunden. So können Sie Dinge wie Validierung, Fehlermeldungen, Typkonvertierung usw. anhängen. Sie möchten das Formular einfach an einen Spring-Controller senden und behandeln alle Formularfelder auf dem Server mit Code wie "request.getParameter ('field1')"? Dann würde ich vorschlagen, nur ein einfaches HTML-Formular zu verwenden.

-1

einfach command hinzufügen Attribut-Tag im Frühjahr zu bilden.

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