Fórum JSF + PrimeFaces #420739

30/07/2012

0

Bom Noite.... Tenho a seguinte dúvida...

Estou utilizando JSF com a biblioteca do Primefaces... Preciso chamar um método através de EL... O problema é que em um momento consigo chamar o método através da EL #{perfilBean.renderizar} e em outro momento preciso chamar utilizando a EL #{perfilBean.renderizar()}. Então minha dúvida é, o porque as vezes ele aceita sem os () especificando que é um método e as vezes não... oO

Exemplo Funcionando:

XHTML

                    <h:selectOneRadio value=#{perfilBean.perfil} >
                        <p:ajax listener=#{perfilBean.redirecionar} />
                        <f:selectItem itemValue=paciente itemLabel=Paciente  />
                        <f:selectItem itemValue=secretaria itemLabel=Secreária(o) />
                        <f:selectItem itemValue=nutricionista itemLabel=Nutricionista />
                        <f:selectItem itemValue=labExames itemLabel=Laboratório de Exames />
                    </h:selectOneRadio>

/*Método para redirecionar*/

    public void redirecionar() {


        try {
            if (perfil.equals(paciente)) {
                FacesContext.getCurrentInstance().getExternalContext().redirect(/Nutrisis/cdPaciente.jsf);
            } else if (perfil.equals(secretaria)) {
                FacesContext.getCurrentInstance().getExternalContext().redirect(/Nutrisis/cdSecretaria.jsf);
            } else if (perfil.equals(nutricionista)) {
                FacesContext.getCurrentInstance().getExternalContext().redirect(/Nutrisis/cdNutricionista.jsf);
            } else {
                FacesContext.getCurrentInstance().getExternalContext().redirect(/Nutrisis/cdLabExames.jsf);
            }

        } catch (IOException ex) {
            Logger.getLogger(PerfilBean.class.getName()).log(Level.SEVERE, null, ex);
        }


    }


O exemplo abaixo segue exatamente a mesma lógica, mas não funciona. Minha intenção era deixar de ter uma página para cada tipo de perfil e tê-los todos na mesma página, porém renderizando o fildset em questão, apenas quando for selecionado o perfil desejado.

                    <h:selectOneRadio value=#{perfilBean.perfil} >
                        <p:ajax listener=#{perfilBean.renderizar} /> <!-- Método modificado para renderizar -->
                        <f:selectItem itemValue=paciente itemLabel=Paciente  />
                        <f:selectItem itemValue=secretaria itemLabel=Secreária(o) />
                        <f:selectItem itemValue=nutricionista itemLabel=Nutricionista />
                        <f:selectItem itemValue=labExames itemLabel=Laboratório de Exames />
                    </h:selectOneRadio>

                    <p:fieldset legend=Paciente toggleable=true id=paciente 
                       rendered=#{perfilBean.renderizar} > <!-- Erro informando que a propriedade renderizar não foi  
                                                                  localizada -->

                    <p:fieldset legend=Paciente toggleable=true id=paciente 
                       rendered=#{perfilBean.renderizar()} > <!-- Carrega página para seleção do perfil, porém ao  
                                                               selecionar o perfil não renderiza o componente -->
/*Método para renderizar*/

public Boolean renderizar() {

        if (perfil.equals(paciente))
            return true;
            return false;
        }


Outro detalhe é que se já deixar o radiobox paciente selecionar por default, ai ele renderiza o componente.
Teste

Teste

Responder

Posts

31/07/2012

Davi Costa

Vc vai ter que observar as propriedades dos seus componentes.
listener aceitar seu método,
já rendered talvez espere um getter e setter tipo getMetodo.
Propriedade de objeto (como campos de entrada) lidam melhor com getters e setters. Já ações de botões e ajax não há essa necessidade


att Davi
Responder

Gostei + 0

08/08/2012

Robson Teixeira

complementando o que o davi falou normalmente no EL quando você coloca a seguinte chamada #{perfilBean.renderizar}
o JSF tenta procurar na sua managedBean o método getRenderizar() ou isRenderizar(), mas quando você declara
#{perfilBean.renderizar()} o mesmo procura o método renderizar() que deve está declarado em sua ManagedBean.

att
robson
Responder

Gostei + 0

08/08/2012

Teste

Agradeço toda a ajuda pessoal...

Tinha esquecido (na verdade não sabia mesmo) de colocar o update no ajax... Então utilizei update=@form, no ajax e resolveu o problema...

Agradeço a ajuda de todos...
Responder

Gostei + 0

08/08/2012

Davi Costa

Show de bola Anderson.
Sucesso.

att Davi
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar