3
respostas

Por que funciona e as vezes não, chamar método por EL

Por que em alguns casos funciona chamar um método de um Bean por EL sem usar os "()" funciona e as vezes se você se não colocar, não funciona e acaba dando uma exception? "Class XXX does not have the property"

"com.sun.faces.facelets.compiler.AttributeInstruction.write(AttributeInstruction.java:94) com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82) com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:207)"

3 respostas

Então,

Ele só vai chamar o método sem o () se o mesmo tiver um GET na frente.

Por exemplo:

Se você chamar #{alunoBean.listaAlunos} o JSF irá inferir que no seu bean existe um método chamado getListaAlunos().

Caso você queira chamar outro método que não comece com GET, deverá declarar os parênteses da função (por exemplo, se seu método fosse buscarAlunos(), deverá chamar como #{alunoBean.buscarAlunos()}

Estou tentando entender melhor o padrão também, mas me parece que quando está em um campo como "value" subentende-se que é o valor de uma propriedade, e precisa do get e set no bean correspondente.

Quando está em um campo como "action" ou "validator" subentende-se que é um método mesmo, e não precisa de get e set, basta colocar o nome do método que está no bean.

Tem em algum lugar para consultar, a logica por trás do avaliador de expressão para entendermos melhor como funciona?