1. ホーム
  2. forms

[解決済み] SpringのformタグのmodelAttributeとcommandName属性の違い?

2023-02-14 14:50:47

質問

Spring 3では、jspのformタグに2つの異なる属性があることがわかりました。

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

この中でmodelAttributeという属性はフォームオブジェクトの名前で、そのプロパティがフォームへの入力に使用されます。そして、私はこれをフォームを投稿する際に使用し、コントローラでは @ModelAttribute を使って値を取得し、バリデータを呼び出し、ビジネスロジックを適用しています。ここではすべてうまくいっています。では

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

この属性に期待されることは、そのプロパティに入力することになるフォームオブジェクトでもあるのでしょうか?

どのように解決するのですか?

もし、あなたが のソースコードを見ると 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 が望ましいとされているのは、他の方も指摘されている通りです。