2
respostas

Página jsp não retorna campos preenchidos ao clicar em Editar

Pessoal, estou enfrentando alguns problemas para implementar um método de edição. Ao clicar em editar sou redirecionado para a página, mas não consigo preencher ela com os valores do BD e ao preencher os campos manualmente e clicar em editar é feita uma inserção e não edição. A classe controller, nos métodos referentes a edição, ficou assim:

@GetMapping("/update/{id}")
    public ModelAndView preUpdate(@PathVariable("id") Long id, ModelMap model ) {
        Chamado chamado = chamadoDao.getId(id);
        System.out.println("teste:" + chamado);
        model.addAttribute("chamados", chamado);
        System.out.println(model);
        return new ModelAndView("/chamados/editar", model);

    }

    @PostMapping("/update")
    public ModelAndView update(@Valid @ModelAttribute("chamado") Chamado chamado, BindingResult result, RedirectAttributes attr) {
        if(result.hasErrors()) {
            return form(chamado);
        }
        chamadoDao.editar(chamado);
        attr.addFlashAttribute("sucesso", "Chamado alterado com sucesso.");
        return new ModelAndView("redirect:chamados/lista-chamados");
    }

A classe ChamadoDao

    @Transactional(readOnly=true)
    public Chamado getId(Long id) {
        String jpql = "from Chamado c where c.id = :id";
                TypedQuery<Chamado> query = manager.createQuery(jpql, Chamado.class);
                query.setParameter("id", id);
                return query.getSingleResult();
    }
    @Transactional(readOnly=false)
    public void editar(Chamado chamado) {
        manager.merge(chamado);
    }

Página editar.jsp


<!DOCTYPE html>
<html>
<head>
<title>Editar Chamados</title>
</head>
<body>
    <div class="container">
        <div class="form-container">
            <header class="header">
                <h1 class="title">Editar Chamado</h1>
            </header>
                <s:url value="${chamados.id == null ? '/chamados/gravar' : '/chamados/update'}" var="update"/>

            <form action="${s:mvcUrl('CC#update').build() }" method="post" class="form" modelAttribute="chamado">
                        <div class="row">
                        <div class="form-group col">
                        <label for="atividade">Atividade</label> <input type="text"
                            class="form-control" id="atividade" name="atividade"
                             required>

                    </div>
                    <div class="form-group col">
                        <label for="frenteDeTrabalho">Frente de Trabalho</label> <input type="text"
                            class="form-control" id="frenteDeTrabalho"
                            name="frenteDeTrabalho" required>

                    </div>
                </div>

                <div class="row">
                    <div class="form-group col">
                        <label for="nivel">Nível</label> <input type="text" class="form-control"
                            id="nivel" name="nivel" required>


                    </div>
                    <div class="form-group col">
                        <label for="prazo">Prazo</label>
                         <input type="text" class="form-control" name="prazo" id="datepicker" /> 
                         <script>
                             $('#datepicker').datepicker({ 
2 respostas

No seu form de editar eu não vi a definição do id do chamado que está sendo editado. Imagino que o problema seja esse.

Oi Alberto, Boa noite! Como seria feita essa definição do id? Ao clicar em editar ele me redireciona para a página e o id aparece na url corretamente. Só não popula os campos do formulário.