92 votes

Balise JSTL if pour les chaînes de caractères égales

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 veux appliquer certains éléments de page pour cette valeur. Comment puis-je utiliser une balise 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 faire ? Ou puis-je tout aussi bien utiliser les scriptlets, c'est-à-dire

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

Merci pour toute réponse ou commentaire.

1 votes

Pouvez-vous préciser getPSystem() y ansokanInfo ? vous les définissez dans la demande ou vous y accédez par l'intermédiaire de l'interface de l'entreprise ? import ?

1 votes

Je les ai définis dans la demande et la solution (contournement) consistait à mettre à niveau Websphere comme l'a indiqué BalusC, pour qu'une version plus récente puisse invoquer les méthodes des haricots avec des balises. J'utilisais la version standard de websphere dans la question et une version antérieure à jsp et jstl pouvait exécuter des méthodes. Veuillez trouver mon autre question où BalusC nous dit que j'utilisais une version de websphere qui nécessitait une version plus récente pour pouvoir invoquer les méthodes.

1 votes

Avez-vous mis à jour votre serveur d'applications à la version 8 ? et cette solution échoue-t-elle ?

151voto

Adam Gent Points 15055

Essayez :

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

JSP/Servlet 2.4 (je pense que c'est le numéro de la version) ne supporte pas les appels de méthode dans EL et ne supporte que les propriétés. Les derniers conteneurs de servlets supportent les appels de méthode (par exemple Tomcat 7).

1 votes

J'ai mis à jour ma réponse en fonction de celle de Jorn. Coup de chapeau à ce dernier.

3 votes

J'ai abandonné JSP(X). J'utilise soit Mustache ( github.com/samskivert/jmustache ) ou mon propre langage de templating JATL ( code.google.com/p/jatl ).

1 votes

Comment faire des cordes multiples ? Il doit y avoir un meilleur moyen que <c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">

39voto

Phani Points 1848
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">

16voto

Jörn Horstmann Points 18118

Je pense que les autres réponses omettent un détail important concernant le nom de la 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 le document suivant 'Introspector.decpitalize'. qui fait partie de la norme java bean :

Cela signifie normalement la conversion du premier caractère de la majuscule à la minuscule, mais dans le cas spécial (inhabituel) où il y a plus d'un caractère et où le premier et le deuxième caractères sont tous deux en majuscules, nous le laissons tranquille.

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

Dans votre cas, le code JSTL devrait donc ressembler à ce qui suit (notez le "P" majuscule) :

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

2 votes

Les récupérateurs et les régleurs avec une convention d'appellation sont à peu près la définition d'un haricot Java. Je pense que nous avons besoin de plus d'informations concernant l'endroit où la variable est transmise au jsp. Pour être disponible pour EL, elle doit se trouver dans une certaine portée, par exemple en tant qu'attribut de requête ou de pageContext. Une variable locale créée par un bloc script ne serait pas disponible pour EL.

5voto

JohanB Points 261

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

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X