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

FormsSpring MvcModelattribute

Forms Problem Overview


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?

Forms Solutions


Solution 1 - Forms

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.

Solution 2 - Forms

OLD WAY = commandName

...
<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>
..

Solution 3 - Forms

I had the same question a while ago, I can't remember the exact differences but from research I ascertained that commandName was the old way of doing it and in new applications you should be using modelAttribute

Solution 4 - Forms

commandName = name of a variable in the request scope or session scope that contains the information about this form,or this is model for this view. Tt should be a been.

Solution 5 - Forms

In xml based config, we will use command class to pass an object between controller and views. Now in annotation we are using modelattribute.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPulkitView Question on Stackoverflow
Solution 1 - FormsSotirios DelimanolisView Answer on Stackoverflow
Solution 2 - Formsdiego matos - kekeView Answer on Stackoverflow
Solution 3 - FormsjaxView Answer on Stackoverflow
Solution 4 - Formskrishan kansalView Answer on Stackoverflow
Solution 5 - FormsThiyaguView Answer on Stackoverflow