problem modify user spring boot thymeleaft

24 Views Asked by At

I have a problem when modifying a user, it sends me a url with an error and the user is not modified, if someone can help me to make it work correctly

I will leave the controller, service, userDTO, userMapper, my user_management and modify user

enter image description here

<form th:object="${modificarUsuario}" th:action="@{/modificar_usuario/{id_usuario}}" method="post">
                <div class="inputs">
                    <div class="nombre ">
                        <label for="modificarNombre">Nombre</label>
                        <div class="form-input">
                            <input type="text" id="modificarNombre" th:field="*{nombre}" />
<!--                            <div th:if="${#fields.hasErrors('nombre')}" th:errors="*{nombre}"  class="text-danger"></div>-->
                        </div>                  
                    </div>
                    <div class="apellido-p">
                        <label for="modificarApellidoP">Apellido Paterno</label>
                        <div class="form-input">
                            <input type="text" id="modificarApellidoP" th:field="*{apellido_p}" />
<!--                            <div th:if="${#fields.hasErrors('apellido_p')}" th:errors="*{apellido_p}" class="text-danger" ></div>-->
                        </div>                  
                    </div>
                    <div class="apellido-m">
                        <label for="modificarApellidoM">Apellido Materno</label>
                        <div class="form-input">
                            <input type="text" id="modificarApellidoM" th:field="*{apellido_m}" />
<!--                            <div th:if="${#fields.hasErrors('apellido_m')}" th:errors="*{apellido_m}" class="text-danger" ></div>-->
                        </div>
                    </div>
                    <div class="correo">
                        <label for="modificarCorreo">Correo</label>
                        <div class="form-input">
                            <input type="email" id="modificarCorreo" th:field="*{correo}" />
<!--                            <div th:if="${#fields.hasErrors('correo')}" th:errors="*{correo}" class="text-danger" ></div>-->
                        </div>
                    </div>
                    <div class="contraseña">
                        <label for="modificarPassword">Contraseña</label>
                        <div class="form-input">
                            <input type="password" id="modificarPassword" placeholder="********" readonly />
                        </div>
                    </div>
                    <div class="tipo-usuario">
                        <label for="modificarCargo">Tipo de Usuario</label>
                        <select id="modificarCargo" th:field="*{cargo}">
                            <option value="" disabled selected></option>
                            <option th:value="ROL_ESTUDIOS" th:selected="${#strings.equals(modificarUsuario.cargo, 'ROL_ESTUDIOS')}">Estudios</option>
                            <option th:value="ROL_ADMINISTRADOR" th:selected="${#strings.equals(modificarUsuario.cargo, 'ROL_ADMINISTRADOR')}">Administrador</option>
                        </select>
                        <i class="fa-solid fa-chevron-down"></i>
<!--                        <div th:if="${#fields.hasErrors('cargo')}" th:errors="*{cargo}" class="text-danger" ></div>-->
                    </div>
                </div>
                <div class="boton-guardar">
                    <button type="submit">Guardar</button>
                </div>
            </form>

<td><a th:href="@{/modificar_usuario(id_usuario=${usuario.id_usuario})}"><i class="fa-solid fa-pen-to-square"></i> Modificar</a></td>

@Service
public class GestionUsuariosService {

    @Autowired
    private UsuarioRepository usuarioRepository;
    @Autowired
    private UsuarioMapper usuarioMapper;
    @Autowired
    private PasswordEncoder passwordEncoder;

    public List<Usuario> listarUsuarios() {
        return usuarioRepository.findAll();
    }
    
    public Usuario obtenerUsuarioPorId(Long id_usuario) {
        return usuarioRepository.findById(id_usuario).orElse(null);
    }

    public Usuario modificarUsuario(Long id_usuario, UsuarioDTO usuarioDTO) {
        Usuario usuarioExistente = usuarioRepository.findById(id_usuario).orElse(null);
        
        if (usuarioExistente != null) {
            Usuario usuarioActualizado = usuarioMapper.toEntity(usuarioDTO);
            usuarioActualizado.setId_usuario(id_usuario);
            return usuarioRepository.save(usuarioActualizado);
        }
        
        return null;
    }
public class UsuarioDTO {
    
    @NotEmpty(message = "El correo es obligatorio")
    @Email(message = "Ingrese un correo electrónico válido")
    private String correo;
    
    @NotEmpty(message = "La contraseña es obligatorio")
    @Size(min = 6, message = "La contraseña debe tener al menos 6 caracteres")
    private String password;
    
    @NotEmpty(message = "El nombre es obligatorio")
    private String nombre;
    
    @NotEmpty(message = "El apellido paterno es obligatorio")
    private String apellido_p;
    
    @NotEmpty(message = "El apellido materno es obligatorio")
    private String apellido_m;
    
    @NotNull(message = "El cargo es obligatoria")
    private EnumRoles cargo;

GETTER / SETTERS 
@Component
public class UsuarioMapper {

    @Autowired
    private RolRepository rolRepository;

    public Usuario toEntity(UsuarioDTO dto) {
        Usuario usuario = new Usuario();
        usuario.setCorreo(dto.getCorreo());
        usuario.setPassword(dto.getPassword());
        
        Persona persona = new Persona();
        persona.setNombre(dto.getNombre());
        persona.setApellido_p(dto.getApellido_p());
        persona.setApellido_m(dto.getApellido_m());

        EnumRoles cargo = dto.getCargo();
        Rol rol = rolRepository.findByCargo(cargo);

        usuario.setPersona(persona);
        usuario.setRol(rol);

        return usuario;
    }
    
    public UsuarioDTO toDTO(Usuario usuario) {
        UsuarioDTO usuarioDTO = new UsuarioDTO();
        usuarioDTO.setCorreo(usuario.getCorreo());
        usuarioDTO.setNombre(usuario.getPersona().getNombre());
        usuarioDTO.setApellido_p(usuario.getPersona().getApellido_p());
        usuarioDTO.setApellido_m(usuario.getPersona().getApellido_m());
        usuarioDTO.setCargo(usuario.getRol().getCargo());
        return usuarioDTO;
    }

}
@GetMapping("/modificar_usuario")
        public ModelAndView modificarFormulario(@RequestParam Long id_usuario) {
            Usuario usuarioExistente = gestionUsuariosService.obtenerUsuarioPorId(id_usuario);
            if (usuarioExistente != null) {
                UsuarioDTO usuarioDTO = usuarioMapper.toDTO(usuarioExistente);
                return new ModelAndView("modificar_usuario").addObject("modificarUsuario", usuarioDTO);
            } else {
                
                return new ModelAndView("redirect:/gestion_usuarios");
            }
        }

        @PostMapping("/modificar_usuario")
        public String modificarUsuario(@RequestParam Long id_usuario, @Valid @ModelAttribute("modificarUsuario") UsuarioDTO usuarioDTO, BindingResult bindingResult, RedirectAttributes redirectAttributes) {
            if (bindingResult.hasErrors()) {
                return "modificar_usuario";
            }

            Usuario usuarioActualizado = gestionUsuariosService.modificarUsuario(id_usuario, usuarioDTO);
            if (usuarioActualizado != null) {
                redirectAttributes.addAttribute("successMessage", "Usuario Actualizado");
            } else {
                
                redirectAttributes.addAttribute("errorMessage", "No se pudo actualizar el usuario");
            }

            return "redirect:/gestion_usuarios";
        }

I hope help and answer about modifying

0

There are 0 best solutions below