我的代码中的这一行有问题:
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 moreTomcat 6和7之间的EL语法有什么变化吗?
发布于 2013-10-01 13:02:19
罪魁祸首在这里
fn:endsWith(myCartController.class.name,'.CartController')由于Tomcat7.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'https://stackoverflow.com/questions/19116659
复制相似问题