java: los datos del formulario actualizados no llegan al controlador

CorePress2024-01-24  7

Escenario: el usuario desea editar algunos detalles de un perfil existente. El problema es que cuando se envía el formulario, en el controlador el valor actualizado para ese atributo (ejemplo: país) no está presente. Todavía contiene el valor anterior que estaba allí antes de la edición. Usando la pestaña de red en la consola de desarrollador de Chrome, verifiqué que al enviarlo, el formulario envió el nuevo valor, pero en el controlador desapareció.

El formulario que contiene el campo:

<form:form id="userDetailsForm" commandName="userForm">
    <div id="userCountryWrapper">
        <label>Enter Country:<label>
        <form:input path="userCountry" id="userCountry" value="${userForm.userCountry}" />
    </div>
</form:form>

El responsable del tratamiento donde recibo los datos:

public String getFormData (@ModelAttribute("userForm") @Valid UserForm userForm, BindingResult result, ModelMap model, HttpServletRequest request, HttpServletResponse response){
    ..
    UserEntity userEntity = new UserEntity();
    userEntity.setCountry(userForm.getCountry);
    ..
}

¿Alguna aportación/sugerencia sobre por qué puede ocurrir esta pérdida de datos? Gracias de antemano.



------------------------------------

Creo que el problema está en tu controlador y, para ser más específico, creo que debes cambiar la línea UserEntity userEntity = new UserEntity(); debido a que crea un nuevo objeto en lugar de actualizarlo, creo que una solución simple es usar algo como esto userEntinty = userRepository.findUserById(userForm.getUserId).orElseThrow(() -> { new Exception }); usuarioEntity.setCountry(userForm.getCountry); userRepository.save(usuarioEntinty); No estoy seguro pero puedes comprobarlo y luego decirnos la solución

2

Entiendo lo que estás diciendo, pero incluso si lo hago, el problema no cambia, ¿verdad? Los datos del formulario no llegan al controlador, así que ese es el problema que necesito resolver. ¡Gracias por la sugerencia de todos modos!

- Anirban Chatterjee

28 de marzo de 2021 a las 0:50

Vale, sí, lo entiendo, así que tal vez el problema sea que el formulario no contiene los atributos de acción y método

- SakisDev

29 de marzo de 2021 a las 8:40



------------------------------------

Para pasar los datos del formulario al controlador, se puede utilizar thymeleaf.

<form action="#" th:action="@{/getformdata}" th:object="${userForm}" method="POST">
    <label>Enter Country:<label>
    <input type="text" th:field="*{userCountry}">
    <button type="submit" >save user</button>
</form>

Para usar los atributos de thymeleaf en formato HTML, debe incluir

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

En el controlador

public String getFormData (@ModelAttribute("userForm") @Valid UserForm userForm, BindingResult result, ModelMap model, HttpServletRequest request, HttpServletResponse response){
    ..
    Optional<UserForm> result = userRepository.findById(userForm.getId());
    if(result.isPresent()){
          UserForm user = result.get();
          user.setCountry(userForm.getCountry());
          userRepository.save(user);
     }
..
}

1

Voy a investigar esto. Gracias

- Anirban Chatterjee

13 de abril de 2021 a las 0:48

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare