Difference between modelAttribute and commandName

2019-01-16 03:48发布

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?

5条回答
Emotional °昔
2楼-- · 2019-01-16 04:22

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

查看更多
三岁会撩人
3楼-- · 2019-01-16 04:30

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

查看更多
萌系小妹纸
4楼-- · 2019-01-16 04:31

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>
..
查看更多
Ridiculous、
5楼-- · 2019-01-16 04:36

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.

查看更多
何必那么认真
6楼-- · 2019-01-16 04:40

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.

查看更多
登录 后发表回答