listar formulario ejemplos java jsp jstl

java - formulario - Evaluar list.conta string en JSTL



jstl maven (7)

La siguiente es más una solución que una respuesta a su pregunta, pero puede ser lo que está buscando. Si puede poner sus valores en un mapa en lugar de una lista, eso resolvería su problema. Simplemente asigne sus valores a un valor no nulo y haga esto <c:if test="${mymap.myValue ne null}">style=''display:none;''</c:if> o incluso puede asignar un style=''display:none; y simplemente ${mymap.myValue}

Necesito ocultar un elemento si ciertos valores están presentes en el JSP

Los valores se almacenan en una lista, así que probé:

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

Pero, no funciona.

¿Cómo puedo evaluar si una lista contiene un valor en JSTL, la lista y los valores son cadenas?


Lamentablemente, creo que JSTL no admite nada más que una iteración a través de todos los elementos para resolver esto. En el pasado, he usado el método forEach en la biblioteca de etiquetas principales:

<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>

Después de que esto se ejecute, $ {contiene} será igual a "verdadero" si myList contiene myValue.


Necesita usar la función fn:contains() o fn:containsIgnoreCase() .

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

...

<c:if test="${not fn:containsIgnoreCase(mylist, ''apple'')}"> <p>Doesn''t contain ''apple''</p> </c:if>

o

<c:if test="${not fn:contains(mylist, ''Apple'')}"> <p>Contains ''Apple''</p> </c:if>


Otra forma de hacer esto es usar un Map (HashMap) con los pares Clave, Valor que representan su objeto.

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

En JSTL

<c:if test="${not empty map[1]}">

Esto debería volverse verdadero si el par existe en el mapa


Si está utilizando Spring Framework, puede usar Spring TagLib y SpEL:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> --- <spring:eval var="containsValue" expression="mylist.contains(myValue)" /> <c:if test="${containsValue}">style=''display:none;''</c:if>


no hay una función incorporada para verificar eso: lo que haría sería escribir su propia función tld, que toma una lista y un elemento, y llama al método contains () de la lista. p.ej

//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>

Luego, cree una clase llamada Yourclass y agregue un método estático llamado contains con la firma anterior. Estoy seguro de que la implementación de ese método es bastante auto explicativa:

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

Entonces puedes usarlo en tu jsp:

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

La etiqueta se puede usar desde cualquier JSP en el sitio.

editar: más información sobre el archivo tld - más información aquí


<c:if test="${fn:contains(task.subscribers, customer)}">

Esto funciona bien para mi.