3
respostas

Passar um objeto de uma view para outra.

Estou dando os primeiros passos em jsf com primefaces, estou há muito tempo tentando algo mais do que extremamente trivial, que é, de uma página com uma lista de Pacientes clicar em um botão "detalhes" que deveria abrir uma outra página com o paciente selecionado na lista com todos os seus campos e listas de objetos relacionados. Como posso fazer isso? Até agora não vi uma reposta objetiva sequer nos fóruns da internet. Já consegui fazer ambas as telas, porém, quando seleciono o segundo ou terceiro pacientes na primeira tela que tem a lista permanece o primeiro paciente selecionado na tela de detalhe. Obrigado.

3 respostas

Ola Ivan, tudo bem?

o que você precisa fazer é na lista, adicionar um commandButton, ou commandLink que redirecione para a página de Paciente passando o id do Paciente no parametro da função que fará o redirecionamento. Na hora que carregar as páginas do detalhe, vc pega os dados do banco do Paciente pelo Id dele e preenche a tela.

Olá Samir. Muito obrigado pela ajuda. Consegui fazer funcionar, porém, gostaria se possível que você avaliasse se o que eu fiz foi uma boa prática ou se ainda posso melhorar. Na pagina de detalhe usei viewParam e viewAction dentro do metadata:

    <f:metadata>
        <f:viewParam value="#{pacienteDetalheBean.id}" name="id"/>
        <f:viewAction action="#{pacienteDetalheBean.carregaDetalhe()}" />
    </f:metadata>

E no método que faz o direcionamento fiz assim:

    public String detalhar(Paciente paciente){
        return "paciente-detalhe?faces-redirect=true&id="+paciente.getId();
    }

Oi Ivan, essa solução é uma ótima solução.

outra possibilidade seria fazer o redirect dentro do Bean, mas dessa forma também funciona perfeitamente.