2009-07-02 15 views

Respuesta

41

Usted puede hacer esto utilizando etiquetas JSTL, pero el resultado no es óptimo:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<html> 
<body> 

<jsp:useBean id="numbers" class="java.util.HashSet" scope="request"> 
    <% 
     numbers.add("one"); 
     numbers.add("two"); 
     numbers.add("three"); 
    %> 
</jsp:useBean> 

<c:forEach items="${numbers}" var="value"> 
    <c:if test="${value == 'two'}"> 
     <c:set var="found" value="true" scope="request" /> 
    </c:if> 
</c:forEach> 
${found} 

</body> 
</html> 

Una mejor manera sería utilizar una función personalizada:

package my.package; 
public class Util { 

    public static boolean contains(Collection<?> coll, Object o) { 
    if (coll == null) return false; 
    return coll.contains(o); 
    } 

} 

Esto se define en un archivo TLD RAÍZ /WEB-INF/tag/custom.tld:

<?xml version="1.0" encoding="UTF-8"?> 
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
    version="2.1"> 
    <tlib-version>1.0</tlib-version> 
    <short-name>myfn</short-name> 
    <uri>http://samplefn</uri> 
    <function> 
     <name>contains</name> 
     <function-class>my.package.Util</function-class> 
     <function-signature>boolean contains(java.util.Collection, 
      java.lang.Object)</function-signature> 
    </function> 
</taglib> 

La función puede ser importado en las JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="myfn" uri="http://samplefn"%> 
<html> 
<body> 

<jsp:useBean id="numbers" class="java.util.HashSet" scope="request"> 
    <% 
     numbers.add("one"); 
     numbers.add("two"); 
     numbers.add("three"); 
    %> 
</jsp:useBean> 

${myfn:contains(numbers, 'one')} 
${myfn:contains(numbers, 'zero')} 

</body> 
</html> 

La próxima versión de EL (debido en JEE6) debe permitir que la forma más directa:

${numbers.contains('two')} 
+0

+1 para utilizar la función personalizada. Es la forma correcta de ir y reutilizable :) – AlfaTeK

1

Si está usando Spring Framework, puede utilizar la primavera TagLib y SpEL:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
--- 
<spring:eval var="containsValue" expression="yourList.contains(yourValue)" /> 

Contains (true or false): ${containsValue} 
Cuestiones relacionadas