Оцените строку list.contains в JSTL

Если вы хотите опубликовать данные JSON в Firebase из приложения Android, вы можете либо проанализировать данные JSON в коде Android, а затем записать их, используя Firebase SDK, или [ 112] вы можете отправить строку JSON напрямую в REST API Firebase.

В качестве альтернативы вы можете реализовать облачную функцию, которая является кодом, работающим на серверах Google, и вызывать сторонний API оттуда. По шагам эта функция Cloud:

  1. Вызывает сторонний API для получения данных
  2. Записывает эти данные в базу данных Firebase, которые ваши клиенты затем прослушивают

  3. Затем вы периодически запускаете эту функцию, как описано здесь: Облачные функции для запуска по Firebase вовремя? . Для этого я обычно использую cron-job.org.

Обратите внимание, что ваш проект Firebase должен быть на платном плане, чтобы иметь возможность вызывать сторонние API.

84
задан OscarRyz 8 June 2010 в 16:10
поделиться

4 ответа

К сожалению, я думаю, что JSTL не поддерживает ничего, кроме итерации по всем элементам, чтобы понять это. Раньше я использовал метод forEach в библиотеке основных тегов:

<c:set var="contains" value="false" />
<c:forEach var="item" items="${myList}">
  <c:if test="${item eq myValue}">
    <c:set var="contains" value="true" />
  </c:if>
</c:forEach>

После этого выполнения $ {contains} будет равно "true", если myList содержит myValue.

64
ответ дан 24 November 2019 в 08:30
поделиться

Я нашел это решение удивительным.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%
   ArrayList list = new ArrayList();
   list.add("one");
   list.add("two");
   list.add("three");
%>
<c:set var="list" value="<%=list%>" />
<html>
<body>
        My list is ${list}<br/>
<c:if test='${fn:contains(list, "two")}'>
        My list contains two <br/>
</c:if>
<c:if test='${fn:contains(list, ",")}'>
        My list contains , 
</c:if>
</body>
</html>

вывод для кода выше

, Мой список [один, два, три]

, Мой список содержит два

, Мой список содержит,

я надеюсь, что он помогает кому-то.

-1
ответ дан 24 November 2019 в 08:30
поделиться

нет встроенного -in, чтобы проверить это - вам нужно написать свою собственную функцию tld, которая принимает список и элемент и вызывает метод списка contains (). например

//in your own WEB-INF/custom-functions.tld file add this
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib
        xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0"
        >
    <tlib-version>1.0</tlib-version>
    <function>
        <name>contains</name>
        <function-class>com.Yourclass</function-class>
        <function-signature>boolean contains(java.util.List,java.lang.Object)
        </function-signature>
    </function>
</taglib>

Затем создайте класс с именем Yourclass и добавьте статический метод с именем contains с указанной выше подписью. Я уверен, что реализация этого метода не требует пояснений:

package com; // just to illustrate how to represent the package in the tld
public class Yourclass {
   public static boolean contains(List list, Object o) {
      return list.contains(o);
   }
}

Затем вы можете использовать его в своем jsp:

<%@ taglib uri="/WEB-INF/custom-functions.tld" prefix="fn" %>
<c:if test="${  fn:contains( mylist, myValue ) }">style='display:none;'</c:if>

Тег можно использовать из любого JSP на сайте.

edit: подробнее о файле tld - подробнее здесь

96
ответ дан 24 November 2019 в 08:30
поделиться

Следующее - это скорее обходной путь, чем ответ на ваш вопрос, но, возможно, это именно то, что вы ищете. Если вы можете поместить свои значения на карту вместо списка, это решит вашу проблему. Просто сопоставьте свои значения с ненулевым значением и сделайте это style = 'display: none;' или вы даже можете сопоставить его с style = 'display: none; и просто вывести $ {mymap.myValue}

2
ответ дан 24 November 2019 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: