spring中的form标签中的modelAttribute和commandName属性之间的区别?

时间:2014-02-01 07:57:00

标签: forms spring-mvc modelattribute

在Spring 3中,我在jsp

中的form标签中看到了两个不同的属性
<form:form method="post" modelAttribute="login">

在此属性modelAttribute是表单对象的名称,其属性用于填充表单。我在发布表单时使用它,在控制器中我使用@ModelAttribute来捕获值,调用验证器,应用业务逻辑。这里一切都很好。现在

<form:form method="post" commandName="login">

这个属性的期望是,它还是一个表单对象,我们将填充它们的属性吗?

5 个答案:

答案 0 :(得分:121)

如果您查看支持<form>元素的source code of FormTag (4.3.x),您会注意到这一点

/**
 * 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应该是首选,正如其他人也指出的那样。

答案 1 :(得分:16)

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

答案 2 :(得分:13)

前一段时间我有同样的问题,我不记得确切的差异,但是从研究中我确定commandName是旧的做法,在新的应用程序中你应该使用{{1} }

答案 3 :(得分:2)

commandName =请求范围或会话范围中包含此表单信息的变量的名称,或者此视图的模型。应该是一个。

答案 4 :(得分:-2)

在基于xml的配置中,我们将使用命令类在控制器和视图之间传递对象。现在在注释中我们正在使用modelattribute