下面的 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)
这是怎么引起的,我该如何解决?
最佳答案
如果您的环境不支持 EL 2.2,就会发生这种情况。使用这样的括号/参数调用直接方法
value="#{userbean.getAll()}"
仅从 EL 2.2 开始支持,它与 Servlet 3.0 齐头并进。如果您遇到此异常,则只能表示您没有部署到 Servlet 3.0 兼容容器,或者您的 web 应用程序的 web.xml
未声明符合 Servlet 3.0,或者您的 web 应用程序的 /WEB-INF/lib
到处都是随意下载的特定于 servletcontainer 的 JAR 文件,这些 JAR 文件源自完全不同的 servletcontainer make/version,不符合 EL 2.2。基本上有2种解决方案:
value="#{userbean.all}"
web.xml
遵守 Servlet 3.0。您还应该绝对确保您的 web 应用程序的
/WEB-INF/lib
不包含 任何 servletcontainer 特定的库,例如 el-api.jar
和 friend (另见 this related question)。请注意,这根本不是 JSF 问题。您收到来自
javax.el
的异常/org.apache.el
包裹,不是来自 javax.faces
/com.sun.faces
包裹。这意味着这是一个EL问题。这基本上是说你的 EL 语法是错误的。它遇到了 (
它没想到的地方。此后清楚地列出了预期的字符/运算符。也可以看看:
关于jsf - org.apache.el.parser.ParseException : Encountered "(" at line X, 列 Y. 期待 [...],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17836525/