mvc multiple formulario form ejemplo attribute annotation forms spring-mvc modelattribute

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.