Не удалось проанализировать выражение [# {myCartController.cartView == 'RETAIL_PRICE_GROSS' и fn :ndsWith (myCartController.class.name, '. CartController')}]

У меня проблема с этой строкой в ​​моем коде:

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

Что-то изменилось в синтаксисе EL между Tomcat 6 и 7?


person Timo Kurowski    schedule 01.10.2013    source источник


Ответы (1)


Виновник здесь:

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

Начиная с Tomcat 7.0.4, идентификаторы языка Java, такие как new, instanceof, class, public и т. Д., Больше не допускаются в качестве имен переменных / функций EL. Это следствие исправления ошибки в главе 1.19 спецификации EL 2.2.

Вам нужно указать их как простые строки в скобках:

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

Смотрите также:


Не связанное с конкретной проблемой, конкретное выражение можно улучшить следующим образом, используя Class#getSimpleName() вместо Class#getName():

myCartController['class'].simpleName == 'CartController'
person BalusC    schedule 01.10.2013
comment
Спасибо большое, сэр. - person Timo Kurowski; 01.10.2013