вызов метода java.util.Map.contains () в JSP - PullRequest
3 голосов
/ 16 июня 2011

Есть ли способ вызвать метод java.util.Map.contains () в JSP, где Map является свойством бина.

Ответы [ 4 ]

10 голосов
/ 16 июня 2011
${fooBean.fooMap.containsValue("baz")}

Выше будет работать в JSP 2.2 или выше.Если вы используете контейнер до 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")}
8 голосов
/ 16 июня 2011

Я предполагаю, что вы говорите об использовании EL в JSP правильным образом и, следовательно, не о старомодных скриптлетах , в противном случае ответ очень очевиден, как указано 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(), то вам нужно убедиться, что вы используете совместимый с Servlet 3.0 контейнер, такой как Tomcat 7, Glassfish 3, JBoss AS 6 и т. д., и что ваш web.xml объявлен как соответствующий Servlet 3.0.Таким образом, вы можете использовать новую функцию EL 2.2: вызывать не получающие методы с аргументами.

<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 голосов
/ 16 июня 2011

Вы можете использовать код скриптлета:

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

Это не красиво, но должно работать. Также могут быть доступны некоторые библиотеки тегов, которые делают что-то подобное.

0 голосов
/ 16 июня 2011

Поскольку JSP - это просто Java, вы можете называть, что хотите.Просто попробуйте.

...