2017-06-20 2 views
0

Das folgende ist das Verlegen von zwei ListenWie analysieren und filtern Sie zwei Listen in JSP oder JSTL mit Lambda Expression und Stream API oder auf andere Weise?

Zuerst muss ich finden, ob zweite Liste Inhalt haben, dessen ID mit erster Liste übereinstimmt. So unnötig muss ich innerhalb der ersten Iteration für Schleife anwenden

<c:forEach var="mock" items="${form.aktivityList}"> 

    <c:set value="false" var="ifAttachyExists" /> 
    <c:forEach var="doc1" items="${form.aktivityList}"> 
     <c:forEach var="doc1" items="${form.aktivityList}"> 
      <c:forEach items="${form.attachyList}" var="attachy"> 
       <c:if test="${ attachy.getId eq doc1.getId() }"> 
        <c:set value="true" var="ifAttachyExists" /> 
       </c:if> 
      </c:forEach> 
     </c:forEach> 
    </c:forEach> 


    <c:if test="${ifAttachyExists}"> 
     <div class="table"> 
      <c:forEach items="${form.attachyList}" var="attachy"> 
       <c:if test="${ attachy.getId eq mock.getId() }"> 
        DO THIS AND THIS AND THIS 
       </c:if> 
      </c:forEach> 
     </div> 
    </c:if> 
</c:forEach> 

Sobald der Wert von attachy wahr existiert drehen dann i auf der zweiten Liste analysieren und die gewünschten Ergebnisse angezeigt werden.

Der Code sieht schäbig aus. Könnte mir jemand helfen, wenn ich den Lambda-Ausdruck oder die Stream-API in JSP oder einer anderen Methode verwenden kann, um mit dieser Situation umzugehen?

+0

https://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files –

+0

Danke, aber Ich bitte nicht um Scriptlets. Gibt es einen anderen Ausweg aus der oben genannten Situation? – fatherazrael

Antwort

1

basierend auf [1] empfehle ich nicht zu versuchen, dies in dir JSP zu lösen, aber es gibt auf andere Option, die ich mir vorstellen konnte.

Sie könnten eine Java-Klasse mit einer statischen Methode erstellen, die genau das tut, was Sie tun möchten, oder sogar die Ausgabe an Ihre Bedürfnisse anpassen.

public class CustomTag { 

    public static List<> doTagAction(arguments....) { 
      /* 
      * put your logic here and return a list or what you need 
      */ 
    } 
} 

Diese statische Methode könnte dann leicht in Ihrem jsps über eine Taglib [2] zur Verfügung gestellt werden.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<taglib 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" 
     version="2.1"> 

    <tlib-version>1.0</tlib-version> 
    <short-name>your Taglib</short-name> 

    <function> 
     <name>doTagAction</name> 
     <function-class>CustomTag</function-class> 
     <function-signature>java.util.List doTagAction(/* your arguments */)</function-signature> 
    </function> 
</taglib> 

die Sie in Ihrem JSP einfach über Tag-Verweis verwenden könnten!

[1] How to avoid Java code in JSP files?

[2] https://www.tutorialspoint.com/jsp/jsp_custom_tags.htm

+0

Ich habe diesen Weg nur gefunden und bereits implementiert. Danke für die Antwort. Als Antwort akzeptiert – fatherazrael

Verwandte Themen