Разница между атрибутами modelAttribute и commandName в теге формы в spring?
Я новичок в Spring 3, возможно, я задаю низкий стандартный вопрос. Я видел два разных атрибута в теге формы в jsp
<form:form method="post" modelAttribute="login">
в этом атрибуте modelAttribute это имя объекта формы, свойства которого используются для заполнения формы. И я использовал его при отправке формы, а в контроллере я использовал @ModelAttribute
для захвата значения, вызывая валидатор, применяя бизнес-логику. Здесь все прекрасно. Теперь
<form:form method="post" commandName="login">
Что ожидается от этого атрибута, это также объект формы, свойства которого мы собираемся заполнить?
Ответы
Ответ 1
Если вы посмотрите на исходный код 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
, как указывали другие.
Ответ 2
OLD WAY = имя_команды
...
<spring:url value="/manage/add.do" var="action" />
<form:form action="${action}" commandName="employee">
<div>
<table>
....
NEW WAY = modelAttribute
..
<spring:url value="/manage/add.do" var="action" />
<form:form action="${action}" modelAttribute="employee">
<div>
<table>
..
Ответ 3
У меня был тот же вопрос некоторое время назад, я не помню точных различий, но из исследования я убедился, что commandName
был старым способом этого, и в новых приложениях вы должны использовать modelAttribute
Ответ 4
commandName = имя переменной в области запроса или области сеанса, содержащей информацию об этой форме, или это модель для этого представления. Tt должен быть.
Ответ 5
В конфигурации на основе xml мы будем использовать класс команды для передачи объекта между контроллером и представлениями. Теперь в аннотации мы используем modelattribute
.