J'ai besoin de masquer un élément si certaines valeurs sont présentes dans le JSP
Les valeurs sont stockées dans une liste alors j'ai essayé:
<c:if test="${ mylist.contains( myValue ) }">style='display:none;'</c:if>
Mais ça ne marche pas.
Comment puis-je évaluer si une liste contient une valeur dans JSTL, la liste et les valeurs sont des chaînes.
Réponses:
Malheureusement, je pense que JSTL ne supporte rien d'autre qu'une itération à travers tous les éléments pour comprendre cela. Dans le passé, j'ai utilisé la méthode forEach dans la bibliothèque de balises principale:
Après cette exécution, $ {contains} sera égal à "true" si myList contenait myValue.
la source
il n'y a pas de fonction intégrée pour vérifier cela - ce que vous feriez est d'écrire votre propre fonction tld qui prend une liste et un élément, et appelle la méthode contains () de la liste. par exemple
Créez ensuite une classe appelée Yourclass et ajoutez une méthode statique appelée contains avec la signature ci-dessus. Je suis sûr que la mise en œuvre de cette méthode est assez explicite:
Ensuite, vous pouvez l'utiliser dans votre jsp:
La balise peut être utilisée à partir de n'importe quelle JSP du site.
edit: plus d'infos sur le fichier tld - plus d'infos ici
la source
Collection
au lieu deList
dans le taglib - cela fonctionne de la même manière mais prend en charge plus de types de collection commeSet
sUne autre façon de procéder consiste à utiliser une
Map (HashMap)
paire clé avec valeur représentant votre objet.Dans JSTL
Cela devrait retourner vrai si la paire existe dans la carte
la source
test="${isPresentByValue[myValue]}"
.Vous devez utiliser la fonction
fn:contains()
oufn:containsIgnoreCase()
....
ou
Remarque: cela fonctionnera comme
mylist.toString().contains("apple")
et si ce n'est pas ce que vous recherchez, utilisez une autre approche.la source
mylist.toString().contains("apple")
ce qui n'est absolument pas ce à quoi vous vous attendiez au départ.Ce qui suit est plus une solution de contournement qu'une réponse à votre question, mais c'est peut-être ce que vous recherchez. Si vous pouvez mettre vos valeurs dans une carte au lieu d'une liste, cela résoudra votre problème. Mappez simplement vos valeurs à une valeur non nulle et faites-le
<c:if test="${mymap.myValue ne null}">style='display:none;'</c:if>
ou vous pouvez même mapperstyle='display:none;
et simplement afficher${mymap.myValue}
la source
OU
la source
Si vous utilisez EL 3.0+ , la meilleure approche dans ce cas est celle expliquée dans une autre rubrique:
la source
Si vous utilisez Spring Framework, vous pouvez utiliser Spring TagLib et SpEL:
la source
J'ai trouvé cette solution incroyable.
La sortie pour le code ci-dessus est
Ma liste est [un, deux, trois]
Ma liste en contient deux
Ma liste contient,
J'espère que cela aide quelqu'un.
la source
Cela fonctionne bien pour moi.
la source