Bom Noite.... Tenho fuçado um pouco no JSF com Primefaces e 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>
Código JAVA
/*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.
XHTML
<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 -->
Código Java
/*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.