javax.el.ELException: Fehler beim Analysieren des Ausdrucks [{pz: instanceof (Objekt, 'com.project.domain.MyClass')}}]

7

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')}]

%Vor%

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.

    
Garytxo 23.10.2011, 14:39
quelle

4 Antworten

16

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 wobei jemand anders auf das gleiche Problem hingewiesen hat wie du. Um Ihr Problem zu lösen, müssen Sie den Namen Ihrer EL-Funktion beispielsweise in isInstanceOf oder etwas umbenennen.

    
BalusC 23.10.2011, 15:56
quelle
7

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.

    
Adrian Cosma 07.11.2012 13:26
quelle
5

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.

    
user2970100 08.11.2013 18:40
quelle
2

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

    
user3032655 25.02.2014 01:27
quelle

Tags und Links