有没有办法在JSP中调用java.util.Map.contains()方法,其中Map是bean的属性。
答案 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,你可以调用你想要的东西。就试一试吧。