Erro ao utilizar uma EL do facelets em versões superiores ao 6.0.18 do TomCat

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">

Aqui está o mapeamento da expressao no arquivo do facelets

<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>[/code]



A classe que busca o boleto

[code]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.

[code]Caused by: javax.el.ELException: Error Parsing: #{ge:getBoleto©.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” …
"-" …

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

[/code]

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

[quote=wescleyfcosta]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">

Aqui está o mapeamento da expressao no arquivo do facelets

<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>[/code]



A classe que busca o boleto

[code]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.

[code]Caused by: javax.el.ELException: Error Parsing: #{ge:getBoleto©.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” …
"-" …

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

[/code]

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[/quote]

Amigo? Conseguiu resolver estou passando pelo mesmo problema?
qual a solução?

Opa,

Faz tanto tempo e mudou tanto o sistema aqui que não lembro bem o que fizemos ai, mas acredito que o consegui resolver o caso atualizando a api do EL do tomcat para 2,2 (ou 2,1) na época.
E também passei usar o Factory de expression languagem do JBoss (tive que baixar o um jar extra).

flw