Difference between modelAttribute and commandName attributes in form tag in spring?

forms, modelattribute, spring-mvc

Solution

If you look at the source code of `FormTag` (4.3.x) which backs your `<form>` element, you'll notice this

/**
 * 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;
}

They are both referring to the same field, thus having same effect.

But, as the field name indicates, `modelAttribute` should be preferred, as others have also pointed out.

Problem

In Spring 3, I have seen two different attribute in form tag in jsp ``` <form:form method="post" modelAttribute="login"> ``` in this the attribute modelAttribute is the name of the form object whose properties are used to populate the form. And I used it in posting a form and in controller I have used `@ModelAttribute` to capture value, calling validator, applying business logic. Everything is fine here. Now ``` <form:form method="post" commandName="login"> ``` What is expected by this attribute, is it also a form object whose properties we are going to populate?

Original source