JSTL if tag pour chaînes égales

90

J'ai une variable d'un objet sur ma page JSP:

<%= ansokanInfo.getPSystem() %>

La valeur de la variable est NAT, ce qui est correct et je souhaite appliquer certains éléments de page pour cette valeur. Comment utiliser un tag pour connaître le cas? J'ai essayé quelque chose comme

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

Mais ce qui précède n'affiche rien. Comment dois-je le faire? Ou puis-je tout aussi bien utiliser des scriptlets ie

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

Merci pour toute réponse ou commentaire.

Niklas R.
la source
1
Pouvez-vous s'il vous plaît élaborer getPSystem()et ansokanInfo? les définissez-vous dans la demande ou y accédez-vous via import?
Santhosh
1
IIRC Je les définissais dans la demande et la solution (solution de contournement) était de mettre à niveau la websphere comme indiqué par BalusC, puis une version plus récente peut invoquer des méthodes bean par des balises. J'utilisais websphere standard dans la question et une version avant que jsp et jstl ne puissent exécuter des méthodes. Veuillez trouver mon autre question où BalusC nous dit que j'utilisais une version Websphere qui avait besoin d'une version plus récente pour pouvoir invoquer les méthodes.
Niklas R.
1
Alors maintenant, avez-vous mis à niveau votre serveur d'applications à 8? et cette solution échoue-t-elle?
Santhosh
@SanKrish Je n'utilise pas JSP maintenant. J'espère que cela fonctionne pour vous et qu'il a été mis à jour pour les versions plus récentes du serveur d'applications.
Niklas R.

Réponses:

145

Essayer:

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

JSP / Servlet 2.4 (je pense que c'est le numéro de version) ne prend pas en charge les appels de méthode dans EL et ne prend en charge que les propriétés. Les derniers conteneurs de servlet prennent en charge les appels de méthode (par exemple, Tomcat 7).

Adam Gent
la source
1
J'ai mis à jour ma réponse en fonction de la réponse de Jorn. Pointe du chapeau à lui.
Adam Gent
3
J'ai abandonné JSP (X). J'utilise Moustache ( github.com/samskivert/jmustache ) ou mon propre langage de création de modèles JATL ( code.google.com/p/jatl ).
Adam Gent
1
Comment feriez-vous plusieurs chaînes? Il doit y avoir un meilleur moyen que<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon
36
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">
Phani
la source
16

Je pense que les autres réponses manquent un détail important concernant le nom de propriété à utiliser dans l'expression EL. Les règles de conversion des noms de méthodes en noms de propriétés sont spécifiées dans «Introspector.decpitalize» qui fait partie du standard du bean java:

Cela signifie normalement convertir le premier caractère des majuscules aux minuscules, mais dans le cas spécial (inhabituel) lorsqu'il y a plus d'un caractère et que les premier et deuxième caractères sont en majuscules, nous le laissons seul.

Ainsi "FooBah" devient "fooBah" et "X" devient "x", mais "URL" reste comme "URL".

Donc, dans votre cas, le code JSTL devrait ressembler à ce qui suit, notez le 'P' majuscule:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">
Jörn Horstmann
la source
2
Les getters et setters avec une convention de nommage sont à peu près la définition d'un bean java. Je suppose que nous avons besoin de plus d'informations sur l'endroit où la variable est transmise au jsp. Pour être disponible pour EL, il doit être dans une certaine portée, par exemple en tant qu'attribut request ou pageContext. Une variable locale créée par un bloc de script ne serait pas disponible pour EL.
Jörn Horstmann
5

Vous pouvez utiliser des scriptlets, cependant, ce n'est pas la voie à suivre. De nos jours, les scripts en ligne ou le code JAVA dans vos fichiers JSP sont considérés comme une mauvaise habitude.

Vous devriez lire un peu plus sur JSTL. Si l'objet ansokanInfo est dans votre portée de requête ou de session, imprimer l'objet (méthode toString ()) comme ceci: $ {ansokanInfo} peut vous donner des informations de base. $ {ansokanInfo.pSystem} doit appeler la méthode getter d'objet. Si tout cela fonctionne, vous pouvez utiliser ceci:

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