forms - multiple - spring mvc formulario ejemplo
¿Diferencia entre los atributos modelAttribute y commandName en la etiqueta del formulario en la primavera? (5)
En la configuración basada en xml, usaremos la clase de comando para pasar un objeto entre el controlador y las vistas. Ahora en la anotación estamos usando modelattribute
.
En Spring 3, he visto dos atributos diferentes en etiqueta de formulario en jsp
<form:form method="post" modelAttribute="login">
en esto, el atributo modelAttribute es el nombre del objeto de formulario cuyas propiedades se usan para rellenar el formulario. Y lo utilicé para publicar un formulario y en el controlador utilicé @ModelAttribute
para capturar valor, llamar al validador y aplicar lógica comercial. Todo está bien aquí. Ahora
<form:form method="post" commandName="login">
¿Qué se espera de este atributo? ¿Es también un objeto de formulario cuyas propiedades vamos a poblar?
Hace un tiempo tuve la misma pregunta, no recuerdo las diferencias exactas, pero de la investigación commandName
que commandName
era la forma antigua de hacerlo y en aplicaciones nuevas debería usar 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>
..
Si observa el código fuente de FormTag
(4.3.x) que respalda su elemento <form>
, notará esto
/**
* 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;
}
Ambos se están refiriendo al mismo campo, teniendo el mismo efecto.
Pero, como indica el nombre del campo, modelAttribute
debería ser el preferido, como otros también han señalado.
commandName = nombre de una variable en el alcance de la solicitud o ámbito de la sesión que contiene la información sobre este formulario, o este es el modelo para esta vista. Debería ser un estado.