评估list.contains在JSTL串(Evaluate list.contains strin

2019-07-20 00:00发布

我需要隐藏的元素,如果某些值存在于JSP

该值存储在一个列表,所以我尝试:

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

但是,这是行不通的。

如何评估如果列表包含在JSTL,列表中的值和值是字符串。

Answer 1:

可悲的是,我认为,JSTL不通过的所有元素支持什么,但一个迭代摸不着头脑。 在过去,我已经使用核心标签库在foreach方法:

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

在此之后运行,$ {}包含将等于“真”,如果myList中包含myvalue的。



Answer 2:

有没有内置的功能检查 - 你会做什么是写自己的TLD函数,它接受一个列表和项目,并调用列表的contains()方法。 例如

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

然后创建一个名为Yourclass类,并添加一个名为包含上述签名静态方法。 我敢肯定的是方法的实现是非常自我解释:

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

然后你就可以在你的JSP使用它:

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

标签可以从任何JSP在现场使用。

编辑:关于TLD文件的详细信息- 这里更多信息



Answer 3:

这样做的另一种方法是使用Map (HashMap)与重点,代表对象值对。

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

在JSTL

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

如果对地图中的存在,这应返回true



Answer 4:

您需要使用fn:contains()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>

要么

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


Answer 5:

下面是更多的是解决办法不是回答你的问题,但它可能是你在找什么。 如果你可以把你的价值观在一个地图,而不是一个列表,这将解决您的问题。 只要您的值映射到一个非空值,这样做<c:if test="${mymap.myValue ne null}">style='display:none;'</c:if>或你甚至可以映射到style='display:none; 和简单的输出${mymap.myValue}



Answer 6:

${fn:contains({1,2,4,8}, 2)}

要么

  <c:if test = "${fn:contains(theString, 'test')}">
     <p>Found test string<p>
  </c:if>

  <c:if test = "${fn:contains(theString, 'TEST')}">
     <p>Found TEST string<p>
  </c:if>


Answer 7:

如果你正在使用Spring框架,你可以使用Spring标签库和规划环境地政司:

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


Answer 8:

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

这对我来说工作得很好。



文章来源: Evaluate list.contains string in JSTL
标签: java jsp jstl