4
respostas

Problema ao Editar, esta criando novo objeto

Olá,

Estou com o seguinte problema, estou criando uma tela para editar as informações do usuário que esta logado. Porem ao submeter o formulario para alterar as informações ele esta "criando" um novo usuário.

Por algum motivo o metodo "save" não esta reconhecendo o ID do usuário e por isso esta tentando criar um novo usuário.

Controller:

@RequestMapping(value = "/editar", method = RequestMethod.GET)
    public String editar(Model model) {

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String nomeUsuario = auth.getName();

        Usuario ususarioASerAlterado = repositorioUsuario.findByUsername(nomeUsuario);
        model.addAttribute("usuario", ususarioASerAlterado);

        return "painel.editar.tiles";
    }

    @RequestMapping(value = "/editar", method = RequestMethod.POST)
    public String alterar(@ModelAttribute("usuario") Usuario usuario, Model model) {

        repositorioUsuario.save(usuario);
        return "redirect:/painel/";
    }

JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<c:url var="actionAlterar" value="/painel/editar"></c:url>

<form:form action="${actionAlterar}" method="post" modelAttribute="usuario" cssClass="df-personal-info">

                                <div class="row">
                                    <div class="col-md-6">
                                        <div class="form-group">
                                            <label for="username">Usuário</label>
                                            <form:input path="username" cssClass="form-control"/>
                                            <form:errors path="username" cssStyle="color: red;"></form:errors>
                                        </div>
                                    </div>
                                    <div class="col-md-6">
                                        <div class="form-group">
                                            <label for="nome">Nome</label>
                                            <form:input path="nome" cssClass="form-control"/>
                                            <form:errors path="nome" cssStyle="color: red;"></form:errors>
                                        </div>
                                    </div>
                                </div>

                                <div class="row">
                                    <div class="col-md-6">
                                        <div class="form-group">
                                            <label for="sobrenome">Sobrenome</label>
                                            <form:input path="sobrenome" cssClass="form-control"/>
                                            <form:errors path="sobrenome" cssStyle="color: red;"></form:errors>
                                        </div>
                                    </div>
                                </div>

                                <div class="form-group--submit">
                                    <button type="submit" class="btn btn-default btn-lg btn-block">Alterar informações</button>
                                </div>

                            </form:form>
4 respostas

Acredito que falte um <form:hidden path="id">que envie o ID de seu usuário

Boa tarde, estou com a mesma dúvida, achei estranho ter que mandar esse id separado, la no controller tenho que receber ele como parâmetro também?

Alguém poderia colar o código de um editar aqui? jsp e controller, achei vários na internet mas estão muito confusos.

Acredito que este repositorioUsuario seria o seu DAO certo? Se está utilizando Hibernate, existem métodos nativos como:

SaveOrUpdate: grava ou atualiza um registro.

Merge: faz um merge dos valores passados no objeto com os valores já existente no banco de dados, o que na prática acaba sendo um update também.

Já tentou utilizar alguns destes?

repositorioUsuario.save(usuario);

Tem que verificar o que este método(save) esta fazendo! Como o colega acima apontou, pode ser que falte algum parâmetro para a lógica de Adicionar seja trocada pela de Alterar. Pois se contem o ID, o usuário já existe.