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!

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!