Método que retorna uma lista para um selectOneMenu dependendo de uma propriedade do MB

1 resposta
J

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.

1 Resposta

alanrodrigues

Tive um problema parecido uma vez…
Acabei resolvendo com o rendered caso já houvesse sido acionado o método…

Criado 2 de março de 2012
Ultima resposta 2 de mar. de 2012
Respostas 1
Participantes 2