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

2 respostas
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>

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

2 Respostas

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

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

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

wescleyfcosta

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

Criado 24 de fevereiro de 2011
Ultima resposta 19 de mai. de 2014
Respostas 2
Participantes 2