Jsf javax.el.ELException:未能分析表达式[{pz:instanceof(object,';com.project.domain.MyClass';)}]

Jsf javax.el.ELException:未能分析表达式[{pz:instanceof(object,';com.project.domain.MyClass';)}],jsf,facelets,el,tomcat7,Jsf,Facelets,El,Tomcat7,目前我有一个web项目,JSF1.2和Facelets在Tomcat6.0.18.0中运行。我决定升级servlet容器,因此我在Tomcat7中进行了部署,在我们使用CustomeFacelet函数访问一个视图之前,一切似乎都正常 javax.el.ELException:未能分析表达式[{pz:instanceof(object,'com.project.domain.MyClass')}] 分析以下代码时发生此错误: <ui:repeat var="object" value="#{

目前我有一个web项目,JSF1.2和Facelets在Tomcat6.0.18.0中运行。我决定升级servlet容器,因此我在Tomcat7中进行了部署,在我们使用CustomeFacelet函数访问一个视图之前,一切似乎都正常

javax.el.ELException:未能分析表达式[{pz:instanceof(object,'com.project.domain.MyClass')}]

分析以下代码时发生此错误:

<ui:repeat var="object" value="#{objects}">
<ui:fragment rendered="#{pz:instanceof(object,'com.project.domain.MyClass')}">
...

...
如果我理解正确,它会因为表达式中的冒号而抛出错误。我已经找到了tomcat/lib目录中附带的jasper el,如果我用tomcat 6.0.18中的jasper.jar和jasper-el.jar替换它们,那么一切都会很好地工作

在升级tomcat之前,还有其他人遇到过这个问题吗?他们是如何解决的?
我是否可以使用tomcat 6中的jasper jar在生产中部署tomcat 7,或者这会导致进一步的问题。

这实际上是一个误导性的例外。它有不同的根本原因。函数名
instanceof
无效

报告说:

1.14保留字 以下词语是为该语言保留的,不得用作 标识符

and eq gt true instanceof or ne le false empty not lt ge null div mod

Identifier ::= Java language identifier
其中Java语言标识符表示关键字,如
instanceof
if
while
class
return
static
new
,等等。它们不能在EL中用作变量/函数名。如果您有具有这些名称的属性,请使用大括号表示法,如so
{bean['class'].simpleName}
而不是
{bean.class.simpleName}


这在Tomcat7.0.4中已经修复,或者在这个版本之前的某个地方,正如其他人指出的,与您的问题相同。因此,要解决您的问题,您必须将EL函数名重命名为例如
isInstanceOf
或其他名称。

在catalina.properties([tomcat folder]/conf)中添加这一行,它应该可以解决问题

org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true

但是,您不应该使用保留字。

您也可以尝试更改语法。当我们从Tomcat6迁移到7时,我在维护代码时遇到了同样的问题。我必须将
myobject.class.name
更改为
myobject['class'].name
。在我做了这个修改之后,我的代码又完美地工作了。

非常好的提示,真的!我必须用${instance['class'].simpleName eq…}更改jspx${instance.class.simpleName===…}


我从tomcat 6上的vFabric迁移到tomcat 7上的vFabric

,这将教会我不要用保留字命名函数,错误消息也没有列出这些,这可能会让我省去很多麻烦。再次感谢巴卢斯克,谢谢阿德里安,我也这么做了。事实上,如果我没记错的话,这是我做的第一个更改之一,但是如果你仍然有一个类似于保留字的函数,比如“instanceof”,它仍然会抛出一个错误。纯金,这个响应。谢谢!从Jetty 7移动到Tomcat 7也是适用的。
org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true