Jsf 未能分析表达式[#{myCartController.cartView=';零售价格总额';和fn:endsWith(myCartController.class.name,';.CartController';)]

Jsf 未能分析表达式[#{myCartController.cartView=';零售价格总额';和fn:endsWith(myCartController.class.name,';.CartController';)],jsf,tomcat,el,Jsf,Tomcat,El,我的代码中的这一行有问题: rendered="#{myCartController.cartView == 'RETAIL_PRICE_GROSS' and fn:endsWith(myCartController.class.name,'.CartController')}" 它在Tomcat 6上工作没有问题,但在Tomcat 7上,它抛出以下异常: Caused by: javax.el.ELException: Failed to parse the expression [#{my

我的代码中的这一行有问题:

rendered="#{myCartController.cartView == 'RETAIL_PRICE_GROSS' and fn:endsWith(myCartController.class.name,'.CartController')}"
它在Tomcat 6上工作没有问题,但在Tomcat 7上,它抛出以下异常:

Caused by: javax.el.ELException: Failed to parse the expression [#{myCartController.cartView == 'RETAIL_PRICE_GROSS' and fn:endsWith(myCartController.class.name,'.CartController')}]
    at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:146)
    at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:172)
    at org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:217)
    at org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:67)
    at com.sun.facelets.tag.TagAttribute.getValueExpression(TagAttribute.java:256)
    ... 93 more
Tomcat 6和7之间的EL语法是否发生了变化?

罪魁祸首如下:

fn:endsWith(myCartController.class.name,'.CartController')
自Tomcat 7.0.4以来,像
new
instanceof
class
public
等Java语言标识符不再允许作为EL变量/函数名。这是EL 2.2规范第1.19章错误修复的结果

您需要在大括号表示法中将它们指定为普通字符串:

fn:endsWith(myCartController['class'].name,'.CartController')
另见:

与具体问题无关通过使用
Class#getSimpleName()
而不是
Class#getName()
,可以对特定表达式进行如下改进:


非常感谢,先生。
myCartController['class'].simpleName == 'CartController'