org.apache.el.parser.ParseException: Обнаружено "(" в строке X, столбец Y. Ожидалось одно из [...]

Ниже приведен фрагмент кода JSF:

<p:dataTable value="#{userbean.getAll()}" var="user">

Выкидывает это исключение:

Encountered "(" at line 1, column 18. Was expecting one of: "}" ... "." ... "[" ... ">" ... "gt" ... "<" ... "lt" ... ">=" ... "ge" ... "<=" ... "le" ... "==" ... "eq" ... "!=" ... "ne" ... "&&" ... "and" ... "||" ... "or" ... "*" ... "+" ... "-" ... "/" ... "div" ... "%" ... "mod" ... 
org.apache.el.parser.ParseException: Encountered "(" at line 1, column 18. Was expecting one of:
    "}" ...
    "." ...
    "[" ...
    ">" ...
    "gt" ...
    "<" ...
    "lt" ...
    ">=" ...
    "ge" ...
    "<=" ...
    "le" ...
    "==" ...
    "eq" ...
    "!=" ...
    "ne" ...
    "&&" ...
    "and" ...
    "||" ...
    "or" ...
    "*" ...
    "+" ...
    "-" ...
    "/" ...
    "div" ...
    "%" ...
    "mod" ...

    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.DeferredExpression(ELParser.java:113)
    at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:40)
    at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:93)
    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.faces.facelets.el.ELText$ELTextVariable.apply(ELText.java:203)
    at com.sun.faces.facelets.compiler.AttributeInstruction.apply(AttributeInstruction.java:101)
    at com.sun.faces.facelets.compiler.UIInstructionHandler.apply(UIInstructionHandler.java:141)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:196)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)

Как это вызвано и как я могу решить это?

1 ответ

Это может произойти, если ваша среда не поддерживает EL 2.2. Вызов прямых методов с круглыми скобками / аргументами, как это

value="#{userbean.getAll()}" 

поддерживается только начиная с EL 2.2, который идет рука об руку с Servlet 3.0. Если вы получаете это исключение, то это может означать только то, что вы не развертываете в совместимый с Servlet 3.0 контейнер или что ваше веб-приложение web.xml не заявлено, соответствует Servlet 3.0, или что ваш веб-приложение /WEB-INF/lib изобилует произвольно загруженными JAR-файлами, относящимися к сервлет-контейнеру, происходящими из совершенно другой марки / версии сервлет-контейнера, которая не соответствует EL 2.2.

Есть в основном 2 решения:

  1. Используйте синтаксис, совместимый с EL 2.1, это работает с сервлетами, совместимыми с Servlet 2.5:

    value="#{userbean.all}" 
    
  2. Обновите контейнер до Servlet 3.0 (Tomcat 7, Glassfish 3, JBoss AS 6 и т. Д.) Или исправьте web.xml соблюдать сервлет 3.0.

Вы также должны быть абсолютно уверены, что ваш веб-приложение /WEB-INF/lib не содержит каких - либо специфичных для servletcontainer библиотек, таких как el-api.jar и друзья (см. также этот связанный вопрос).

Обратите внимание, что это не проблема JSF вообще. Вы получили исключение из javax.el / org.apache.el пакет, а не из javax.faces / com.sun.faces пакет. Это означает, что это проблема EL. Это в основном говорит, что ваш синтаксис EL неверен. Столкнулся с ( где он этого не ожидал. Ожидаемые символы / операторы четко перечислены после этого.

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

Другие вопросы по тегам