有没有办法在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)
我假设你正在谈论在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)
| 归档时间: |
|
| 查看次数: |
10091 次 |
| 最近记录: |