web-dev-qa-db-ja.com

SpringのformタグのmodelAttribute属性とcommandName属性の違いは?

Spring 3では、jspのformタグで2つの異なる属性を見ました

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

この場合、属性modelAttributeは、フォームに入力するためにプロパティが使用されるフォームオブジェクトの名前です。そして、フォームの投稿で使用し、コントローラーで値をキャプチャし、バリデーターを呼び出し、ビジネスロジックを適用するために@ModelAttributeを使用しました。ここですべてが順調です。いま

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

この属性によって何が期待されますか?また、プロパティを設定するフォームオブジェクトでもありますか?

89
Pulkit

ソースコードFormTag(4.3.x) を見ると、<form>要素をサポートしていることに気付くでしょう。

/**
 * 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;
}

これらは両方とも同じフィールドを参照しているため、同じ効果があります。

しかし、フィールド名が示すように、modelAttributeが優先されるべきです。他の人も指摘しています。

123

古い方法= commandName

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

新しい方法= modelAttribute

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

私は少し前に同じ質問をしましたが、正確な違いは覚えていませんが、研究からcommandNameがそれを行う古い方法であり、新しいアプリケーションではmodelAttributeを使用する必要があることを確認しました

13
jax

commandName =このフォームに関する情報を含むリクエストスコープまたはセッションスコープの変数の名前。これはこのビューのモデルです。 Ttである必要があります。

1
krishan kansal