Currenty Ich habe ein Webprojekt mit JSF 1.2 und Facelets in Tomcat 6.0.18.0. Ich entschied mich, den Servlet-Container zu aktualisieren, so dass ich ihn in Tomcat 7 einsetzte und alles schien in Ordnung zu sein, bis wir mit meinen custome facelet-Funktionen auf eine Ansicht trafen.
javax.el.ELException: Failed to parse the expression [{pz:instanceof(object,'com.project.domain.MyClass')}]
Dieser Fehler tritt auf, wenn der folgende Code analysiert wird:
%Vor%Wenn ich es richtig verstehe, wird wegen des Doppelpunkts im Ausdruck ein Fehler ausgegeben. Ich habe es auf die Jaspis-el, die mit dem Tomcat / Lib-Verzeichnis kommen, und wenn ich jasper.jar und jasper-el.jar durch die von Tomcat 6.0.18 ersetzen, funktioniert alles gut funktioniert.
Hat jemand anderes dieses Problem vor der Aktualisierung seines Katers? Und wie haben sie es gelöst? Könnte ich in der Produktion Tomcat 7 mit diesen Jaspis Jar von Tomcat 6 bereitstellen, oder könnte dies weitere Probleme verursachen.
Das ist eigentlich eine irreführende Ausnahme. Es hat eine andere zugrunde liegende Ursache. Der Funktionsname instanceof
ist ungültig.
Die EL 2.2-Spezifikation lautet wie folgt:
1.14 Reservierte Wörter
Die folgenden Wörter sind für die Sprache reserviert und dürfen nicht als verwendet werden Identifikatoren.
%Vor%Beachten Sie, dass viele dieser Wörter jetzt nicht in der Sprache sind, aber sie können in der Sprache sein Zukunft, also müssen Entwickler vermeiden, diese Wörter zu verwenden.
und
1.19 Gesammelte Syntax
...
%Vor%...
Dabei steht der Java-Sprachbezeichner für Keywords wie instanceof
, if
, while
, class
, return
, static
, new
usw. Sie dürfen nicht als Variable / verwendet werden. Funktionsnamen in EL. Falls Sie Eigenschaften mit diesen Namen haben, verwenden Sie stattdessen die geschweifte Klammernotation so wie #{bean['class'].simpleName}
anstelle von #{bean.class.simpleName}
.
Dies wurde in Tomcat 7.0.4 oder irgendwo in der Nähe dieser Version behoben, wie von issue 50147 isInstanceOf
Fügen Sie diese Zeile in catalina.properties ([tomcat folder] / conf) hinzu, um das Problem zu beheben.
%Vor%Sie sollten jedoch die reservierten Wörter nicht verwenden.
Sie können auch versuchen, die Syntax zu ändern. Ich hatte genau das gleiche Problem mit dem Code, den ich bei der Umstellung von Tomcat 6 auf 7 beibehalten habe. Ich musste myobject.class.name
in myobject['class'].name
ändern. Nachdem ich diese Änderung vorgenommen hatte, funktionierte mein Code wieder einwandfrei.
Toller Hinweis, in der Tat! Ich musste in meinem jspx $ {instance.class.simpleName == ...} mit $ {instance ['class']. SimpleName eq ...} ändern.
Ich wechselte von vFabric auf Tomcat 6 zu vFabric auf Tomcat 7