spring在form标签中的modelAttribute和commandName属性之间的区别?
我是Spring 3的新手,所以我可能会问一个不好的标准问题。 我在jsp中看到了两个不同的表单标签属性
<form:form method="post" modelAttribute="login">
在这个属性modelAttribute是表单对象的名称,其属性是用来填充表单。 我用它发布表单和控制器我用@ModelAttribute
来捕获价值,调用validation,应用业务逻辑。 这里一切都很好。 现在
<form:form method="post" commandName="login">
这个属性期望什么,它也是一个表单对象,其属性我们将填充?
如果你看看支持你的<form>
元素的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
应该是首选的,正如其他人也指出的那样。
我刚刚有同样的问题,我不记得确切的差异,但从研究我确定commandName
是旧的做法,在新的应用程序中,您应该使用modelAttribute
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> ..
commandName =请求作用域或会话作用域中包含有关此窗体的信息的variables的名称,或者这是此视图的模型。 Tt应该是一个。
在基于xml的configuration中,我们将使用命令类在控制器和视图之间传递对象。 现在在注释中我们使用modelattribute
。