java中的java.util.Map.contains()方法调用

时间:2011-06-16 11:42:57

标签: java jsp el

有没有办法在JSP中调用java.util.Map.contains()方法,其中Map是bean的属性。

4 个答案:

答案 0 :(得分:10)

${fooBean.fooMap.containsValue("baz")}

以上内容适用于JSP 2.2或更高版本。如果您使用的是pre-JSP 2.2容器(例如Java EE 5),那么EL函数可能是更好的解决方案。

静态Java方法:

package contains;
import java.util.Map;
public class Maps {
    public static boolean containsValue(Map<?, ?> map, Object value) {
        return map.containsValue(value);
    }
}

文件WEB-INF/tlds/maps.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1"
  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">
  <tlib-version>1.0</tlib-version>
  <short-name>maps</short-name>
  <uri>/WEB-INF/tlds/maps</uri>
   <function>
    <description>Returns true if the value is contained</description>
    <name>containsValue</name>
    <function-class>contains.Maps</function-class>
    <function-signature>
      boolean containsValue(java.util.Map, java.lang.Object)
    </function-signature>
  </function>
</taglib>

用法:

<%@taglib prefix="maps" uri="/WEB-INF/tlds/maps" %>
...
${maps:containsValue(fooBean.fooMap, "baz")}

答案 1 :(得分:8)

我假设您正在谈论在JSP中使用EL的方式正确,因此不是旧式的 scriptlet ,否则答案非常明显,就像AlexR给出的那样。

您可以使用empty关键字来测试是否存在与密钥关联的非空和非空值。

<c:if test="${not empty bean.map['somekey']}">
    Map contains a non-null/non-empty value on key "somekey".
</c:if>

如果您确实需要调用地图的containsKey()containsValue()方法,那么您需要确保运行与Tomcat 7,Glassfish 3,JBoss AS 6等Servlet 3.0兼容的容器,等,并声明您的web.xml符合Servlet 3.0。这样您就可以使用新的EL 2.2功能:使用参数调用非getter方法。

<c:if test="${bean.map.containsKey('somekey')}">
    Map contains key "somekey".
</c:if>
<c:if test="${bean.map.containsValue('somevalue')}">
    Map contains value "somevalue".
</c:if>

答案 2 :(得分:2)

您可以使用scriptlet代码:

<%= yourBean.getMapProperty().contains() %>

它不漂亮,但应该有效。可能还有一些标签库可以执行类似的操作。

答案 3 :(得分:0)

由于JSP只是一个java,你可以调用你想要的东西。就试一试吧。