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 решения:
Используйте синтаксис, совместимый с EL 2.1, это работает с сервлетами, совместимыми с Servlet 2.5:
value="#{userbean.all}"
Обновите контейнер до 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 неверен. Столкнулся с (
где он этого не ожидал. Ожидаемые символы / операторы четко перечислены после этого.