Gar*_*txo 7 jsf facelets el tomcat7
Currenty我有一个带有JSF 1.2的Web项目和在tomcat 6.0.18.0中运行的Facelets.我决定升级servlet容器,因此我部署在tomcat 7中,所有看起来都没问题,直到我们使用我的个性化facelet函数命中一个视图.
javax.el.ELException: Failed to parse the expression [{pz:instanceof(object,'com.project.domain.MyClass')}]
Caused by: org.apache.el.parser.ParseException: Encountered " ":" ": "" at line 1, column 5. Was expecting one of:
"}" ...
"." ...
"[" ...
Run Code Online (Sandbox Code Playgroud)
解析以下代码时会发生此错误:
<ui:repeat var="object" value="#{objects}">
<ui:fragment rendered="#{pz:instanceof(object,'com.project.domain.MyClass')}">
...
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,它会因为表达式中的冒号而引发错误.我已将它跟踪到tomcat/lib目录中的jasper-el,如果我用tomcat 6.0.18替换jasper.jar和jasper-el.jar,那么每个标记都可以正常工作.
有没有其他人在升级他们的tomcat之前遇到过这个问题?他们是如何解决的?我可以使用tomcat 6中的这些jasper jar在生产tomcat 7中部署,否则会导致进一步的问题.
Bal*_*usC 17
这实际上是一个误导性的例外.它有不同的根本原因.功能名称instanceof
无效.
该EL 2.2规范说以下内容:
1.14保留字
以下单词是为该语言保留的,不得用作标识符.
and eq gt true instanceof or ne le false empty not lt ge null div mod请注意,许多这些单词现在不在语言中,但它们可能在将来,因此开发人员必须避免使用这些单词.
和
1.19收集的语法
...
Run Code Online (Sandbox Code Playgroud)Identifier ::= Java language identifier
...
当Java语言标识代表类似的关键字instanceof
,if
,while
,class
,return
,static
,new
,等他们可能不会被用作EL变量/函数名.如果你有这些名字属性,使用括号符号,而不是像这样#{bean['class'].simpleName}
的代替#{bean.class.simpleName}
.
这已在Tomcat 7.0.4或此版本之前的某处修复,如问题50147所示,其他人指出了与您相同的问题.因此,要解决您的问题,您必须将EL函数名重命名为例如isInstanceOf
.
在catalina.properties([tomcat文件夹]/conf)中添加此行,它应该解决问题.
org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true
Run Code Online (Sandbox Code Playgroud)
但是,您不应该使用保留字.
您也可以尝试更改语法.当我们从Tomcat 6移动到7时,我遇到了与我维护的代码完全相同的问题.我不得不myobject.class.name
改为myobject['class'].name
.在我做了这个改变后,我的代码再次完美地工作.
归档时间: |
|
查看次数: |
17785 次 |
最近记录: |