requestmapping puede para método mvc formulario escritura encontrar ejemplo commandname atributo arquitectura spring spring-mvc controller crud

puede - spring mvc formulario ejemplo



¿Cómo actualizar dos entidades/elementos de modelo de un jsp en Spring MVC? (2)

Mi requisito es hacer una operación CREAR proporcionando al usuario un formulario en un JSP con campos de entrada de dos entidades (por ejemplo, UserDetails y EmploymentDetails )

¿Cuál es la forma más efectiva de actualizar dos formularios en un solo jsp usando un solo envío?

Un enfoque que conozco es combinar las dos entidades en una sola clase contenedora y luego enviar ese objeto como Modelo. ¿Es esa la única solución?

Amable guía.


Es una práctica común colocar cualquier cantidad de objetos en una clase contenedora y usar esta para enviar datos con un solo formulario. Además, puede usar la validación JSR-303 en cualquiera de los objetos:

public class MyForm { @Valid private UserDetails userDetails; @Valid private EmploymentDetails employmentDetails; ... }

su formulario:

<form:form modelAttribute="myForm" method="post"> <form:input path="userDetails.property1"/> <form:input path="userDetails.property2"/> <form:input path="employmentDetails.property1"/> <input type="submit" value="create"/> </form:form>

y su controlador:

@RequestMapping(value = "/", method = RequestMethod.POST) public ModelAndView create (@Valid MyForm myForm, BindingResult bindingResult) { if (bindingResult.hasErrors()) { // here you can retrieve form errors of both objects } UserDetails userDetails = myForm.getUserDetails(); EmploymentDetails employmentDetails = myForm.getEmploymentDetails(); ... }

Otro enfoque es guardar objetos a través de JSON, pero creo que es excesivo y complicado en este caso.


Podría intentar asignar cada objeto a un atributo de modelo diferente:

public String create(@Valid @ModelAttribute(value="UserDetails") UserDetails userDetails, @Valid @ModelAttribute(value="EmploymentDetails") EmploymentDetails employmentDetails, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {

En la forma, estos deben estar vinculados a diferentes prefijos, por ejemplo:

<form:input path="UserDetails.name" />