簡體   English   中英

javax.el.E​​LException:無法解析表達式[{pz:instanceof(object,'com.project.domain.MyClass')}]

[英]javax.el.ELException: Failed to parse the expression [{pz:instanceof(object,'com.project.domain.MyClass')}]

當前,我有一個Web項目,其中包含在Tomcat 6.0.18.0中運行的JSF 1.2和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:
"}" ...
"." ...
"[" ...

解析以下代碼時,會發生此錯誤:

<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,thingthign效果很好。

升級tomcat之前,還有其他人遇到過這個問題嗎? 他們如何解決呢? 我可以使用來自tomcat 6的這些碧玉罐在生產tomcat 7中進行部署,還是可能引起更多問題。

這實際上是一個誤導性的例外。 它具有不同的根本原因。 函數名稱instanceof無效。

EL 2.2規范指出:

1.14保留字

以下單詞是該語言的保留字,不得用作標識符。

\n     和eq gt true instanceof\n     或虛假為空\n     不是lt null div mod\n

請注意,這些單詞中的許多現在都不是該語言,但是將來可能會出現,因此開發人員必須避免使用這些單詞。

1.19收集的語法

...

 Identifier ::= Java language identifier 

...

Java語言標識符代表諸如instanceofifwhileclassreturnstaticnew等的關鍵字。在EL中,它們不能用作變量/函數名稱。 如果您擁有具有這些名稱的屬性,請改為使用大括號表示法,例如#{bean['class'].simpleName}而不是#{bean.class.simpleName}

問題50147所示,此問題已在Tomcat 7.0.4或此版本之前的某個位置修復,其中其他人指出的問題與您相同。 因此,要解決您的問題,您必須將EL函數名稱重命名為isInstanceOf名稱。

在catalina.properties([tomcat文件夾] / conf)中添加此行,它應該可以解決此問題。

org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true

但是,您不應使用保留字。

您也可以嘗試更改語法。 當我從Tomcat 6遷移到7時,我遇到了與代碼相同的確切問題。我不得不將myobject.class.name更改為myobject['class'].name 進行此更改后,我的代碼再次正常運行。

確實是個很好的提示! 我必須用$ {instance ['class']。simpleName eq ...}更改jspx $ {instance.class.simpleName == ...}。

我從tomcat 6上的vFabric遷移到tomcat 7上的vFabric

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM