Galera, por favor, não sei mais o que fazer!
É o seguinte: eu tenho uma tela de detalhes de tratamentos. Cada tratamento tem uma ou mais consultas associadas. Logo eu mostro as informações do tratamento e abaixo uma lista com as consultas.
O meu problema taí!!!
A forma mais lógica para eu conseguir as consultas foi assim:
<p:dataTable value=#{tratamentoBean.tratamento.consultas} var="consulta"...>...</p:dataTable>
Sendo que getConsultas() me retorna um List<>. Até aí tudo bem, os valores são preenchidos normalmente!
Mas dentro do meu dataTable eu quero poder excluir uma consulta!
Então, o que fiz?
<p:column headerText="Ações">
<h:commandLink action=#{consultaBean.excluir()}>
Excluir
<f:setPropertyActionListener target=#{consultaBean.consulta} value="#{consulta}/>
</h:commandLink>
</p:column>
A minha intenção é que quando o usuário clicar em Excluir o método excluir() de consultaBean seja chamado e o atributo consulta seja setado para o valor atual da linha do dataTable, ok!
Mas isso não acontece!!!
Já debuguei esse negócio 1000 vezes e eu descobri uma possível causa: a propriedade tratamento de tratamentoBean (de onde vem a minha lista de consultas) só é setada no fase UPDATE MODEL VALUES, mas parece que o método getConsultas() é chamado vários vezes durante a fase APPLY REQUEST VALUES.
Logo, pelo que entendi, não é passado para consultaBean a instância de Consulta que deveria ser passada porque ele não tem a propriedade tratamento de tratamentoBean em mãos para buscar as consultas, o só vai ocorrer em UPDATE MODEL VALUES!
O que vocês acham?
To há 5 horas mexendo nisso e não consigo resolver! Por favor, alguém ajuda!