Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Problema no relacionamento entre entidade

Tenho um form que tem uma tag "" que busca informações do banco através de ModelAndView que contém uma List das informações do banco, por exemplo, uma List de Medicos, no formulário essa lista é apresentada através do form, porém tenho um problema ao gravar esse form, não me apresenta erro nenhum no console, somente erro 404 mas não é erro de request, tanto que se eu retirar essa tag select, as outras informações do form que são input são todas registradas no banco. O problema acredito que esteja entre a tag select que busca do banco através do ModelAndView e grava essa informação no banco. O código da minha classe e da AgendaController

@Entity
public class Agenda {

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String paciente;
    private int cartSUS;
    private String enderecoPaciente;
    private String cidadePaciente;
    @Enumerated(EnumType.STRING)
    private UF UF;    
    @OneToOne
    private Procedimento procedimento;    
    @OneToOne
    private PostoSaude postoSaude;
    @OneToOne
    private Medico medicos;
    @DateTimeFormat
    private Calendar dataAtendimento;

public class AgendaController {

    @Autowired
    private AgendaDAO agendaDAO;
    @Autowired
    private ProcedimentoDAO procedimentoDAO;
    @Autowired
    private MedicoDAO medicoDAO;
    @Autowired PostoSaudeDAO postosaudeDAO;

    @RequestMapping("/formAgenda")
    public ModelAndView form(){

        List<Procedimento> procedimentos = procedimentoDAO.listar();
        List<Medico> medicos = medicoDAO.listar();
        List<PostoSaude> postos = postosaudeDAO.listar();

        ModelAndView mv = new ModelAndView("formAgenda");
        mv.addObject("procedimentos", procedimentos);
        mv.addObject("medicos",medicos);
        mv.addObject("postos", postos);
        mv.addObject("UF", UF.values());
        System.out.println(procedimentos.size());
        return mv;
    }

    @RequestMapping("/cadagenda")
    public String gravar(Agenda agenda){
        agendaDAO.gravar(agenda);
        return "ok";
    }
7 respostas

Não sei se estou enganado, mas essa dúvida já não foi aberta em outro tópico? Bom, é necessário que vc coloque o formulário, que está na jsp, aqui. Como falei lá, até entendo o que vc ta falando, mas para mim não faz sentido. Só vendo o controller não é suficiente.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html >
<html>
<head>
    <meta charset=ISO-UTF-8>
    <title>Cadastro</title>
    <c:url value="/resources/css" var="cssPath" />
    <link rel="stylesheet" href="${cssPath}/bootstrap-theme.min.css"/>
    <link rel="stylesheet" href="${cssPath}/bootstrap.min.css"/>
    <link rel="stylesheet" href="${cssPath}/bootstrap.css"/>
    <link rel="stylesheet" href="${cssPath}/bootstrap-theme.css"/>
    <link rel="stylesheet" href="${cssPath}/estilo.css"/>
</head>
<body>
    <section class="container">
        <fieldset>
            <legend>Cadastro da Agenda</legend>
                <form action="/agendapsf/cadagenda" method="post">

                    <div>
                        <label>Paciente</label>
                        <input type="text" name="paciente" class="form-control">
                    </div>
                    <div class="radio">
                         <label>
                        <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> Masculino
                         </label>
                    </div>
                    <div class="radio">
                      <label>
                        <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2">
                        Femenino
                      </label>
                    </div>
                    <div>
                        <label>Cartão SUS</label>
                        <input type="number" name="cartSUS" class="form-control">
                    </div>
                    <div>
                        <label>Endereço</label>
                        <input type="text" name="enderecoPaciente" class="form-control">
                    </div>
                    <div>
                        <label>Cidade</label>
                        <input type="text" name="cidadePaciente" class="form-control">
                    </div>
                    <div>
                        <label>Estado</label>
                        <select name="UF">
                            <c:forEach items="${UF}" var="UF">
                                <option value="${UF}">${UF}</option>
                            </c:forEach>
                        </select>
                    </div>
                    <div>
                        <label>Procedimento</label>
                            <select name="procedimento" class="form-control">
                            <c:forEach items="${procedimentos}" var="procedimento">
                                <option value="${procedimento.descricao}">${procedimento.descricao}</option>
                            </c:forEach>
                        </select>
                    </div>
                    <div>
                        <label>Posto de Saúde</label>
                            <select name="postoSaude" class="form-control">
                            <c:forEach items="${postos}" var="postoSaude" >
                                <option value="${postoSaude.nomePsf}">${postoSaude.nomePsf}</option>
                            </c:forEach>
                        </select>
                    </div>
                    <div>
                        <label>Medico</label>
                            <select name="medico" class="form-control">
                            <c:forEach items="${medicos}" var="medico">
                                <option value="${medico.nomeMedico}">${medico.nomeMedico}</option>
                            </c:forEach>
                        </select>
                    </div>
                    <div>
                        <label>Date de Atendimento</label>
                        <input type="text" name="dataAtendimento" class="form-control">

                    </div>

                    <div>
                        <button type="submit" class="btn btn-primary">Gravar</button>
                    </div>
                </form>
        </fieldset>
    </section>


</body>
</html>

alguma ajuda?

Opa, me passei aqui..

Não era para dar 404, mas pode ser que isso aqui esteja te atrapalhando.

Onde tem ${medico.nomeMedico} deveria ser ${medico.id}.. já que vc quer associar o médico com o agendamento.. A mesma coisa vale para os outros selects, menos o da enum.

Meu select ficou da seguinte forma, mas mesmo assim me apresenta erro, porém o erro 400. Poderia ser o que mais?rsrs

<label>Procedimento</label>
                        <select name="procedimento" class="form-control">
                            <c:forEach items="${procedimentos}" var="procedimento">
                                <option value="${procedimento.id}">${procedimento.descricao}</option>
                            </c:forEach>
                        </select>
solução!

O name do select deveria ser procedimento.id, pois vc quer setar o id do procedimento. A mesma coisa vale para os outros.. Provavelmente teve uma mensagem da exception, não?

Rapaz, não apresentava nenhuma mensagem da exception, mas foi resolvido ao trocar o nome do select, achei que o nome do select teria que ser o nome do atributo. Na classe agenda o atributo e Procedimento procedimento e não Procedimento procedimento.id, mas entendi agora... Obrigado