Разница между атрибутами 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.