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

我是Spring3的新,所以可能是我问一个糟糕的标准问题。我在jsp中的form标签中看到了两个不同的属性

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

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

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

这个属性的期望是什么,它也是一个表单对象,我们将要填充的属性?

如果你看看source code of 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应该是首选,因为其他人也指出。

翻译自:https://stackoverflow.com/questions/21495616/difference-between-modelattribute-and-commandname-atributes-in-form-tag-in-sprin

转载注明原文:窗体 – 在spring中的form标签中的modelAttribute和commandName属性之间的区别?