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)

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


person Shankar    schedule 24.07.2013    source источник
comment
Попробуйте изменить value=#{userbean.getAll()} на value=#{userbean.all}. Это помогает?   -  person Robert M.    schedule 24.07.2013
comment
Роберт, getAll - это метод, а не свойство классов.   -  person Shankar    schedule 27.07.2013


Ответы (1)


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

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

поддерживается только начиная с EL 2.2, который идет рука об руку с Servlet 3.0. Если вы получаете это исключение, это может означать только то, что вы не выполняете развертывание в контейнере, совместимом с Servlet 3.0, или что web.xml вашего веб-приложения не объявлено соответствующим Servlet 3.0, или что /WEB-INF/lib вашего веб-приложения завалено произвольно загруженным servletcontainer- определенные файлы 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, чтобы он соответствовал Servlet 3.0.

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

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

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

person BalusC    schedule 24.07.2013