Frage Unterschied zwischen den Attributen modelAttribute und commandName im Formulartag im Frühjahr?


Im Frühjahr 3 habe ich zwei verschiedene Attribute im Form-Tag in Jsp gesehen

<form:form method="post" modelAttribute="login">

In diesem Fall ist das Attribut modelAttribute der Name des Formularobjekts, dessen Eigenschaften zum Füllen des Formulars verwendet werden. Und ich benutzte es beim Posten eines Formulars und in der Steuerung, die ich benutzt habe @ModelAttribute Wert erfassen, Validator aufrufen, Geschäftslogik anwenden. Alles ist gut hier. Jetzt

<form:form method="post" commandName="login">

Was erwartet dieses Attribut, ist es auch ein Formularobjekt, dessen Eigenschaften wir füllen werden?


83
2018-02-01 07:57


Ursprung


Antworten:


Wenn Sie auf die Quellcode von FormTag (4.3.x) welche unterstützt deine <form> Element, werden Sie das bemerken

/**
 * Set the name of the form attribute in the model.
 * <p>May be a runtime expression.
 */
public void setModelAttribute(String modelAttribute) {
    this.modelAttribute = modelAttribute;
}

/**
 * Get the name of the form attribute in the model.
 */
protected String getModelAttribute() {
    return this.modelAttribute;
}

/**
 * Set the name of the form attribute in the model.
 * <p>May be a runtime expression.
 * @see #setModelAttribute
 */
public void setCommandName(String commandName) {
    this.modelAttribute = commandName;
}

/**
 * Get the name of the form attribute in the model.
 * @see #getModelAttribute
 */
protected String getCommandName() {
    return this.modelAttribute;
}

Sie beziehen sich beide auf das gleiche Feld und haben somit dieselbe Wirkung.

Aber, wie der Feldname anzeigt, modelAttribute sollte bevorzugt werden, wie auch andere darauf hingewiesen haben.


114
2018-02-01 15:48



OLD WAY = Befehlsname

...
<spring:url value="/manage/add.do" var="action" />
    <form:form action="${action}" commandName="employee">
        <div>
            <table>
....

NEUER WEG = modelAttribute

..
<spring:url value="/manage/add.do" var="action" />
    <form:form action="${action}" modelAttribute="employee">
        <div>
            <table>
..

15
2018-01-19 16:38



Ich hatte die gleiche Frage vor einer Weile, ich kann mich nicht an die genauen Unterschiede erinnern, aber aus der Forschung habe ich das festgestellt commandName war die alte Art, es zu tun und in neuen Anwendungen, die Sie verwenden sollten modelAttribute


13
2018-02-01 08:52



commandName = Name einer Variablen im Anforderungsbereich oder Sitzungsbereich, der die Informationen zu diesem Formular enthält, oder dies ist ein Modell für diese Ansicht. Es sollte ein sein.


2
2018-02-01 06:11



In der XML-basierten Konfiguration verwenden wir die Befehlsklasse, um ein Objekt zwischen Controller und Ansichten zu übergeben. Jetzt in Annotation, die wir verwenden modelattribute.


-2
2017-11-23 11:00