【问题标题】:Failed to parse the expression [#{myCartController.cartView == 'RETAIL_PRICE_GROSS' and fn:endsWith(myCartController.class.name,'.CartController')}]无法解析表达式 [#{myCartController.cartView == 'RETAIL_PRICE_GROSS' and fn:endsWith(myCartController.class.name,'.CartController')}]
【发布时间】:2013-10-07 15:22:49
【问题描述】:

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

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 语法有什么变化吗?

【问题讨论】:

    标签: jsf tomcat el


    【解决方案1】:

    罪魁祸首在这里:

    fn:endsWith(myCartController.class.name,'.CartController')
    

    自 Tomcat 7.0.4 起,Java 语言标识符(如 newinstanceofclasspublic 等)不再允许作为 EL 变量/函数名称。这是 EL 2.2 规范第 1.19 章错误修复的结果。

    您需要将它们指定为大括号符号中的纯字符串:

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

    另见:


    与具体问题无关,具体的表达方式可以用Class#getSimpleName()代替Class#getName()改进如下:

    myCartController['class'].simpleName == 'CartController'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-22
      • 2016-01-21
      • 2017-03-28
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多