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
が優先されるべきです。他の人も指摘しています。
古い方法= 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>
..
私は少し前に同じ質問をしましたが、正確な違いは覚えていませんが、研究からcommandName
がそれを行う古い方法であり、新しいアプリケーションではmodelAttribute
を使用する必要があることを確認しました
commandName =このフォームに関する情報を含むリクエストスコープまたはセッションスコープの変数の名前。これはこのビューのモデルです。 Ttである必要があります。