Évaluer la chaîne list.contains dans JSTL

Je dois cacher un élément si certaines valeurs sont présentes dans le JSP

Les valeurs sont stockées dans une liste, j’ai donc essayé:

style='display:none;' 

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.

Malheureusement, je pense que JSTL ne supporte rien mais 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.

il n’y a pas de fonctionnalité intégrée pour vérifier cela – ce que vous feriez, c’est écrire votre propre fonction tld qui prend une liste et un élément, et appelle la méthode contains () de la liste. par exemple

 //in your own WEB-INF/custom-functions.tld file add this    1.0  contains com.Yourclass boolean contains(java.util.List,java.lang.Object)    

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:

 package com; // just to illustrate how to represent the package in the tld public class Yourclass { public static boolean contains(List list, Object o) { return list.contains(o); } } 

Ensuite, vous pouvez l’utiliser dans votre jsp:

 <%@ taglib uri="/WEB-INF/custom-functions.tld" prefix="fn" %> style='display:none;' 

La balise peut être utilisée depuis n’importe quel JSP du site.

edit: plus d’infos sur le fichier tld – plus d’infos ici

Une autre façon de procéder consiste à utiliser un Map (HashMap) avec des paires Key, Value représentant votre object.

 Map map = new HashMap(); map.put(new Long(1), "one"); map.put(new Long(2), "two"); 

Dans JSTL

  

Cela devrait retourner vrai si la paire existe dans la carte