Pessoal, meu problema é simples de explicar mas ta muito complicado de resolver.
Tenho as seguintes propriedades no meu MB:
private List listaTratamentoPorPaciente;
private Paciente pacienteParaInsercao;
E seu respectivo método getListaTratamentoPorPaciente()
public List<Tratamento> getListaTratamentoPorPaciente() {
if (listaTratamentoPorPaciente == null) {
if (pacienteParaInsercao != null && pacienteParaInsercao.getPacienteId() != null) {
TratamentoRN tRN = new TratamentoRN();
listaTratamentoPorPaciente = tRN.listarTratamentosPorPaciente(new PacienteRN().carregar(pacienteParaInsercao.getPacienteId()));
}
}
return listaTratamentoPorPaciente;
}
Vejam que para preenchimento da minha lista eu necessariamente preciso que o paciente esteja preenchido.
No segundo if eu testo se ele existe e se o seu ID é diferente de nulo pois na minha página eu tenho um p:autoComplete e dentro dele um p:ajax, pois quando o usuário acionar o evento itemSelect (event=“itemSelect”) o próprio p:autoComplete deve ser enviado para o servidor (ele fornecerá o objeto correto para pacienteParaInsercao através de um converter que já funciona) e o meu h:selectOneMenu deve ser atualizado (update=“tratamento”) exibindo os tratamentos para o paciente escolhido no p:autoComplete acima.
Até aí tudo bem, a tela funciona. O problema é quando aciono o método salvar() do MB.
Ao fazer o teste no segundo if para verificar se pacienteParaInsercao existe e seu ID também, o teste falha e ele não preenche a lista. Isso antes do método salvar() ser executado, provavelmente na fase Restore View do ciclo de vida do JSF.
Nesta fase eu não tenho o atributo pacienteParaInsercao no MB ainda, o qual só vai ser inserido nas últimas fases do ciclo de vida.
Tentei usar immediate=“true” no p:autoComplete para seu valor ser atualizado, mas não funcionou.
No final das contas me é retornado o famoso erro de validação do h:selectOneMenu, geralmente resolvido implementando equals() e hashCode(), o que já fiz no meu código e não funcionou.
A questão é: eu preciso da propriedade pacienteParaInsercao para listar os tratamentos mas não tenho esse valor quando o método getListaTratamentosPorPaciente() é chamado.
O que eu faço?
Desde já agradeço.