春のフォームタグのmodelAttributeとcommandName属性の違いは?


92

Spring 3では、jspのフォームタグに2つの異なる属性があるのを見てきました

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

この場合、属性modelAttributeは、フォームの入力に使用されるプロパティを持つフォームオブジェクトの名前です。フォームの投稿や、@ModelAttribute値の取得、バリデーターの呼び出し、ビジネスロジックの適用に使用したコントローラーで使用しました。ここはすべて元気です。今

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

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

回答:


127

要素を裏付ける(4.3.x)のソースコードFormTagを見ると、<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ように、他の人も指摘しているように、優先する必要があります。


1
良い!fromタグに関連するクラスの名前をどのようにして見つけましたか?
イ・サンヒョン2014

11
@Sangdol従来、クラスは単にと呼ばれていました<tag-name>Tag。この場合、完全修飾クラス名については.jar、タグを含むライブラリ()を開きspring-webます。の下にMETA-INF、がありますspring-form.tld。これにはwithの<tag>エントリがあります。form<tag-class>org.springframework.web.servlet.tags.form.FormTag
Sotirios Delimanolis 2014年

18

古い方法= 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>
..

13

少し前に同じ質問がありましたが、正確な違いを思い出せませんが、調査から、それcommandNameが古い方法であり、新しいアプリケーションで使用する必要があることを確認しましたmodelAttribute


1

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


-3

xmlベースの構成では、コマンドクラスを使用して、コントローラーとビューの間でオブジェクトを渡します。現在、アノテーションではを使用していmodelattributeます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.