[Resolvido] Problema ao chamar um método através do atributo rendered

Olá pessoal,
Acredito que a resposta seja simples, mas não consegui chegar a uma solução.

eu quero decidir entre mostrar um icone de “OK” ou “Erro”. Olhe o código abaixo:

<h:graphicImage url="../icons/iconOK.gif" rendered="#{usuarioController.isMatriculaValida == true}"/>
<h:graphicImage url="../icons/iconErro.gif" rendered="#{usuarioController.isMatriculaValida == false}" />

O método isMatriculaValida avalia uma matricula e retorna um booleano.

O meu problema é o seguinte o JSF interpreta a chamada “usuarioController.isMatriculaValida” como se eu estivesse chamando um atributo da classe usuarioController.
Na verdade eu queria que fosse feita a chamada do MéTodo isMatriculaValida.

O que eu queria é chamar um método pra fazer esta validação, sem ter que criar um atributo apenas para isso.

A minha pergunta é, existe alguma forma de eu “dizer” ao JSF que eu estou querendo chamar um método e um atributo?

Ou necessáriamente eu terei que criar um atributo pra testar uma condição?

Bom dia!

O JSF acessa os atributos pelos getters e setters, logo se você colocar o nome do atributo como “matriculaValida”, ele irá buscar o valor através de um método “isMatriculaValida”, mesmo que este atributo não exista.

Ficaria assim:

<h:graphicImage url="../icons/iconOK.gif" rendered="#{usuarioController.matriculaValida == true}"/>  
<h:graphicImage url="../icons/iconErro.gif" rendered="#{usuarioController.matriculaValida == false}" /> 

Melhorando e removendo as comparações com true e false, que são desnecessárias:

<h:graphicImage url="../icons/iconOK.gif" rendered="#{usuarioController.matriculaValida}"/>  
<h:graphicImage url="../icons/iconErro.gif" rendered="#{!usuarioController.matriculaValida}" /> 

Espero ter ajudado!
:wink:

Obrigado cara.

O que voce falou é justamente o que estou querendo “driblar”.
Não queria acessar um atributo e sim um metodo.

Na verdade eu queria alguma forma de ao chamar “#{usuarioController.matriculaValida}” no meu código, o jsf interprete que estou chamando um método que eu implementei e que retornará um valor. Não queria que fosse chamado um método “get”.

Estou evitando criar um atributo na minha classe só para efetuar esta validação.

Infelizmente esta é uma limitação que existe no JSF, não é possivel chamar métodos nas expressões EL.
A única maneira que conheço para driblar esta limitação, é como eu sugeri acima.
Como o JSF acessa os atributos pelos getters, você pode “enganar” ele, e criar um método “isMatriculaValida” que retorne um valor boolean, sem que exista um atributo “matriculaValida”. Só que na hora de utilizar, no seu rendered, você colocaria “#{usuarioController.matriculaValida}”, entendeu?
Perceba que não estou dizendo para você criar um atributo, e sim criar somente o método.

Qualquer coisa posta aí.

Valeu cara!

Ajudou bastante!

É só renomear o método para getMatriculaValida, que será o método invocado pelo JSF neste caso.
Faltou pensar! hehehe

Abração e Obrigado!