2015-09-26 10 views
6

Ich habe folgendes Formular im Frühjahr, das Fehlermeldungen zeigt. Ich frage mich, wann sollte ich den Frühling benutzen: binden? Was unterscheidet das damit? Ich studierte diese Seiten a, b, aber ich bin immer noch verwirrt.Was ist der Unterschied zwischen spring: bind und form: errors?

<form:form method="post" 
    action="http://localhost:8080/project/calculator/process" 
    modelAttribute="keyPadForm"> 
     Name1: <form:input type="text" path="name1" /> 
     <form:errors path="name1" /> 

<form:form method="post" 
    action="http://localhost:8080/project/calculator/process" 
    modelAttribute="keyPadForm"> 
    <spring:bind path="name1"> 
     Name1: <form:input type="text" path="name1" /> 
     <form:errors path="name1" /> 
    </spring:bind> 

Antwort

2

in Ihrem zweiten Fall ist spring:bind tag obsolet, die erste Form

<form:form method="post" 
    action="http://localhost:8080/project/calculator/process" 
    modelAttribute="keyPadForm"> 
     Name1: <form:input type="text" path="name1" /> 
     <form:errors path="name1" /> 

ist eine Art von syntaktischen Zucker und das Äquivalent lieh, ohne die form Tag-Bibliothek, sondern nur die üblichen HTML-Formular-Tags, würde auf spring:bind beruhen und würde in etwa so aussehen:

<spring:nestedPath path="keyPadForm"> 
    <form method="post" action="http://localhost:8080/project/calculator/process"> 
    <spring:bind path="name1"> 
     Name1:<input type="text" name="${status.expression}" value="${status.value}"> 
     <span class="fieldError">${status.errorMessage}</span> 
    </spring:bind> 
    </form> 
</spring:nestedPath> 

Es gibt Szenarien, in denen Sie einen Unterschied machen kann, z.B. form:input ist immer eine Zwei-Wege-Bindung, so wird der Wert an den Server gesendet und der aktuelle Wert angezeigt, wo wie mit spring:bind können Sie eine einseitige Bindung zu erreichen, nur an den Server senden, indem Sie den Wert z. <input type="text" name="${status.expression}">, aber der Haupt Kern ist, dass form Tag-Bibliothek eine bequemere bindet verwandte Tags

2

Mit spring:bind bietet, können Sie ${status.error} verwenden, um zu überprüfen, ob das name1 Feld einen Fehler hat, und bedingt verschiedene CSS-Klasse anzuzeigen.
Die Fehlermeldung wird weiterhin über form:errors angezeigt, aber auf diese Weise erhalten Sie mehr Steuerelemente.
zum Beispiel:

<form:form method="post" modelAttribute="userForm" action="${userActionUrl}"> 
    <spring:bind path="name"> 
    <div class="form-group ${status.error ? 'has-error' : ''}"> 
     <label>Name</label> 
     <form:input path="name" type="text" id="name" /> 
     <form:errors path="name" /> 
    </div> 
    </spring:bind> 
</form:form> 

und Sie auf diese Spring MVC Form – Check if a field has an error

beziehen
Verwandte Themen