Olá
Até a versão 6.0.18 do Tomcat essa expression language do facelets criada para pegar cada elemento da lista que está sendo renderizada e buscar o Objeto(Boleto) correspondente funcionava corretamente.
<rich:column styleClass="alinhado-direita"
sortBy="#{ge:getBoleto(c).numeroDocumento}" filterEvent="onkeyup">
<facelet-taglib>
<function>
<function-name>getBoleto</function-name>
<function-class>
br.com.ultramax.gestaoescolar.web.controller.admin.financeiro.BoletoFinder
</function-class>
<function-signature>
<![CDATA[
br.com.ultramax.gestaoescolar.core.domain.financeiro.Boleto getBoletoAssociado(br.com.ultramax.gestaoescolar.core.domain.financeiro.MovimentacaoFinanceiro)
]]>
</function-signature>
</function>
</facelet-taglib>
A classe que busca o boleto
public class BoletoFinder {
public static final Boleto getBoletoAssociado(
final MovimentacaoFinanceiro movimentacaoFinanceiro) {
if (movimentacaoFinanceiro == null
|| !movimentacaoFinanceiro.getContaContabil().isContaReceita()) {
return null;
}
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
Integer id = (Integer) request.getAttribute("boletoAssociadoUltimo");
Boleto boletoMovimentacaoFinanceiro = (Boleto) request
.getAttribute("boletoAssociadoCache");
if (!movimentacaoFinanceiro.getId().equals(id)) {
ApplicationContext ctx = FacesContextUtils
.getWebApplicationContext(FacesContext.getCurrentInstance());
ContaReceberModel contaReceberModel = (ContaReceberModel) ctx
.getBean("contaReceberModel");
boletoMovimentacaoFinanceiro = contaReceberModel
.getBoletoMovimentacaoFinanceiro(movimentacaoFinanceiro);
request.setAttribute("boletoAssociadoCache",
boletoMovimentacaoFinanceiro);
request.setAttribute("boletoAssociadoUltimo",
movimentacaoFinanceiro.getId());
}
return boletoMovimentacaoFinanceiro;
}
}
Com a versão superior 6.0.18 do TomCat começou a lançar essa exceção.
Caused by: javax.el.ELException: Error Parsing: #{ge:getBoleto(c).numeroDocumento}
at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:125)
at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:150)
at org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:194)
at org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68)
at com.sun.facelets.tag.TagAttribute.getValueExpression(TagAttribute.java:256)
... 89 more
Caused by: org.apache.el.parser.ParseException: Encountered " "ge" "ge "" at line 1, column 3.
Was expecting one of:
<INTEGER_LITERAL> ...
<FLOATING_POINT_LITERAL> ...
<STRING_LITERAL> ...
"true" ...
"false" ...
"null" ...
"(" ...
"!" ...
"not" ...
"empty" ...
"-" ...
<IDENTIFIER> ...
at org.apache.el.parser.ELParser.generateParseException(ELParser.java:2142)
at org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:2024)
at org.apache.el.parser.ELParser.Unary(ELParser.java:951)
at org.apache.el.parser.ELParser.Multiplication(ELParser.java:711)
at org.apache.el.parser.ELParser.Math(ELParser.java:631)
at org.apache.el.parser.ELParser.Compare(ELParser.java:443)
at org.apache.el.parser.ELParser.Equality(ELParser.java:337)
at org.apache.el.parser.ELParser.And(ELParser.java:281)
at org.apache.el.parser.ELParser.Or(ELParser.java:225)
at org.apache.el.parser.ELParser.Choice(ELParser.java:182)
at org.apache.el.parser.ELParser.Expression(ELParser.java:174)
at org.apache.el.parser.ELParser.DeferredExpression(ELParser.java:112)
at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:40)
at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:93)
... 93 more
Após cercar o que poderia estar diferente entre o tomcat 6.0.18 e os superiores vimos que o jar jasper-el tinha alguma coisa de diferente Pois se pegessemos da versão antiga e colasse na versão nova do tomcat o erro não acontecia...
Alguém sabe o motivo desse erro no tomcat?
PS: Nós conseguimos fazer as coisas funcionarem trocando a o metodo el definido no facelets para fazer a busca no managedBean usado em tela