JSTL if-Tag für gleiche Zeichenfolgen

90

Ich habe eine Variable von einem Objekt auf meiner JSP-Seite:

<%= ansokanInfo.getPSystem() %>

Der Wert der Variablen ist NAT, was korrekt ist, und ich möchte bestimmte Seitenelemente für diesen Wert anwenden. Wie verwende ich ein Tag, um den Fall zu kennen? Ich habe so etwas versucht

<c:if test = "${ansokanInfo.getPSystem() == 'NAT'}">      
   process  
</c:if> 

Aber das Obige zeigt nichts an. Wie soll ich das machen Oder kann ich genauso gut Scriptlets verwenden, dh

<% if (ansokanInfo.getPSystem().equals("NAT"){ %>
process
<% } %>

Vielen Dank für jede Antwort oder Kommentar.

Niklas R.
quelle
1
Können Sie bitte näher erläutern getPSystem()und ansokanInfo? Stellen Sie sie in der Anfrage ein oder greifen Sie über sie zu import?
Santhosh
1
IIRC Ich habe sie in der Anforderung festgelegt und die Lösung (Problemumgehung) bestand darin, die Websphere gemäß den Anweisungen von BalusC zu aktualisieren. Anschließend kann eine neuere Version Bean-Methoden über Tags aufrufen. Ich habe in der Frage Standard-Websphere und eine Version verwendet, bevor jsp und jstl Methoden ausführen konnten. Hier finden Sie meine andere Frage, in der BalusC uns mitteilt, dass ich eine Websphere-Version verwendet habe, für die eine neuere Version erforderlich war, um die Methoden aufrufen zu können.
Niklas R.
1
Haben Sie jetzt Ihren App-Server auf 8 aktualisiert? und schlägt diese Lösung fehl?
Santhosh
@ SanKrish Ich benutze JSP jetzt nicht. Ich hoffe, es funktioniert für Sie und es wurde für neuere Versionen des App-Servers aktualisiert.
Niklas R.

Antworten:

145

Versuchen:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

JSP / Servlet 2.4 (ich denke, das ist die Versionsnummer) unterstützt keine Methodenaufrufe in EL und nur Eigenschaften. Die neuesten Servlet-Container unterstützen Methodenaufrufe (z. B. Tomcat 7).

Adam Gent
quelle
1
Ich habe meine Antwort basierend auf Jorns Antwort aktualisiert. Spitze des Hutes zu ihm.
Adam Gent
3
Ich habe JSP (X) aufgegeben. Ich verwende entweder Moustache ( github.com/samskivert/jmustache ) oder meine eigene Vorlagensprache JATL ( code.google.com/p/jatl ).
Adam Gent
1
Wie würden Sie mehrere Saiten machen? Es muss einen besseren Weg geben als<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon
36
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">
Phani
quelle
16

Ich denke, die anderen Antworten vermissen ein wichtiges Detail bezüglich des Eigenschaftsnamens, der im EL-Ausdruck verwendet werden soll. Die Regeln für die Konvertierung von Methodennamen in Eigenschaftsnamen sind in 'Introspector.decpitalize' angegeben , das Teil des Java-Bean-Standards ist:

Dies bedeutet normalerweise, dass das erste Zeichen von Groß- in Kleinbuchstaben konvertiert wird. In dem (ungewöhnlichen) Sonderfall, in dem mehr als ein Zeichen vorhanden ist und sowohl das erste als auch das zweite Zeichen in Großbuchstaben geschrieben sind, lassen wir es in Ruhe.

Somit wird "FooBah" zu "fooBah" und "X" zu "x", aber "URL" bleibt als "URL".

In Ihrem Fall sollte der JSTL-Code also wie folgt aussehen: Beachten Sie das Großbuchstaben 'P':

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">
Jörn Horstmann
quelle
2
Getter und Setter mit einer Namenskonvention sind so ziemlich die Definition einer Java-Bean. Ich denke, wir brauchen weitere Informationen darüber, wo die Variable an jsp übergeben wird. Um für EL verfügbar zu sein, muss es sich in einem bestimmten Bereich befinden, z. B. als Anforderung oder als pageContext-Attribut. Eine von einem Skriptblock erstellte lokale Variable steht EL nicht zur Verfügung.
Jörn Horstmann
5

Sie können Scriptlets verwenden, dies ist jedoch nicht der richtige Weg. Heutzutage werden Inline-Scriplets oder JAVA-Code in Ihren JSP-Dateien als schlechte Angewohnheit angesehen.

Sie sollten etwas mehr über JSTL lesen. Wenn sich das ansokanInfo-Objekt in Ihrem Anforderungs- oder Sitzungsbereich befindet, können Sie das Objekt (toString () -Methode) wie folgt drucken: $ {ansokanInfo} kann Ihnen einige Basisinformationen geben. $ {ansokanInfo.pSystem} sollte die Objekt-Getter-Methode aufrufen. Wenn dies alles funktioniert, können Sie Folgendes verwenden:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
JohanB
quelle