Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Evaluate list.contains string in JSTL

Tags:

java

jsp

jstl

I need to hide an element if certain values are present in the JSP

The values are stored in a List so I tried:

<c:if test="${  mylist.contains( myValue ) }">style='display:none;'</c:if> 

But, it doesn't work.

How can I evaluate if a list contains a value in JSTL, the list and the values are strings.

like image 532
OscarRyz Avatar asked Sep 29 '09 01:09

OscarRyz


People also ask

How to check contains in JSTL?

JSTL fn:contains() Function. The fn:contains() is used for testing if the string containing the specified substring. If the specified substring is found in the string, it returns true otherwise false.

What tag is used in JSTL to show the output?

The <c:out> tag is similar to JSP expression tag, but it can only be used with expression. It will display the result of an expression, similar to the way < %=... % > work.

What are the different tags in JSTL?

Based on the JSTL functions, they are categorized into five types. JSTL Core Tags: JSTL Core tags provide support for iteration, conditional logic, catch exception, url, forward or redirect response etc. To use JSTL core tags, we should include it in the JSP page like below.

How many tags are provided in JSTL explain any two?

JSTL is a standard tag library that is composed of five tag libraries. Each of these tag libraries represents separate functional area and is used with a prefix. Below table describes the tag libraries available in JSTL.


2 Answers

there is no built-in feature to check that - what you would do is write your own tld function which takes a list and an item, and calls the list's contains() method. e.g.

//in your own WEB-INF/custom-functions.tld file add this <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib         PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"         "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib         xmlns="http://java.sun.com/xml/ns/j2ee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"         version="2.0"         >     <tlib-version>1.0</tlib-version>     <function>         <name>contains</name>         <function-class>com.Yourclass</function-class>         <function-signature>boolean contains(java.util.List,java.lang.Object)         </function-signature>     </function> </taglib> 

Then create a class called Yourclass, and add a static method called contains with the above signature. I m sure the implementation of that method is pretty self explanatory:

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);    } } 

Then you can use it in your jsp:

<%@ taglib uri="/WEB-INF/custom-functions.tld" prefix="fn" %> <c:if test="${  fn:contains( mylist, myValue ) }">style='display:none;'</c:if> 

The tag can be used from any JSP in the site.

edit: more info regarding the tld file - more info here

like image 170
Chii Avatar answered Nov 15 '22 13:11

Chii


Sadly, I think that JSTL doesn't support anything but an iteration through all elements to figure this out. In the past, I've used the forEach method in the core tag library:

<c:set var="contains" value="false" /> <c:forEach var="item" items="${myList}">   <c:if test="${item eq myValue}">     <c:set var="contains" value="true" />   </c:if> </c:forEach> 

After this runs, ${contains} will be equal to "true" if myList contained myValue.

like image 33
Kaleb Brasee Avatar answered Nov 15 '22 15:11

Kaleb Brasee