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

use*_*643 3 java jsp el

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

McD*_*ell 10

${fooBean.fooMap.containsValue("baz")}
Run Code Online (Sandbox Code Playgroud)

以上内容适用于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);
    }
}
Run Code Online (Sandbox Code Playgroud)

文件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>
Run Code Online (Sandbox Code Playgroud)

用法:

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


Bal*_*usC 8

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

您可以使用该empty关键字来测试是否存在与键关联的非null和非空值.

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

如果你真的需要调用map containsKey()containsValue()方法,那么你需要确保你正在运行一个Servlet 3.0兼容容器,如Tomcat 7,Glassfish 3,JBoss AS 6等,并且你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>
Run Code Online (Sandbox Code Playgroud)