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?