春天的表单标签中的modelAttribute和commandName属性之间的区别?


92

在Spring 3中,我在jsp的form标记中看到了两个不同的属性

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

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

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

此属性有什么用,它也是我们要填充其属性的表单对象吗?

Answers:


127

如果查看支持元素FormTag(4.3.x)源代码<form>,则会注意到这一点

/**
 * 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
好!您是如何找到与from标记相关的类的名称的?
Sanghyun Lee

11
@Sangdol通常,该类仅称为<tag-name>Tag。对于完全限定的类名.jarspring-web在这种情况下,请打开包含标签的库()。在下面META-INF,您会找到spring-form.tld。这将有一个<tag>入境form<tag-class>org.springframework.web.servlet.tags.form.FormTag
Sotirios Delimanolis 2014年

18

旧方式= commandName

...
<spring:url value="/manage/add.do" var="action" />
    <form:form action="${action}" commandName="employee">
        <div>
            <table>
....

新方法= modelAttribute

..
<spring:url value="/manage/add.do" var="action" />
    <form:form action="${action}" modelAttribute="employee">
        <div>
            <table>
..

13

不久前我有一个相同的问题,我不记得确切的区别,但是根据研究,我确定这commandName是旧方法,您应该在新应用中使用modelAttribute


1

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


-3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.