简体   繁体   中英

jsp (jstl 1.2) - set a variable from a java list

(I am using jstl version 1.2 and java 6)

I am working with some legacy code that has some logic in its jsp pages, that aside I now need to loop over a list of data, match on something and then set a variable to list value (ArrayList in this case). The reason I need to do this is to then loop over the list I found later on in the jsp file.

Here is the snippet of code I have so far, but does not work:

  <c:set var="listOfChildData" value="${[]}" scope="page"/>

  <c:forEach items="${otherListOfData}" var="data">

    <c:if test="${data.id == dataToMatchOn.id}">

      <c:catch var="exception">${data.children}</c:catch>
      <c:if test="${empty exception}">

        <c:set var="listOfChildData" value="${data.children.toArray()}" scope="page"/>

      </c:if>
    </c:if>
  </c:forEach>

Do I need to manually go through each item in the list and add it to the listOfChildData ?

Reading around, all the examples I found were of creating an array variable from scratch and not from another variable.

If this comes down to using scriptlets, can I do that within a forEach loop?


Updated to include exception handling if data.children is null, empty, etc.

You don't need to copy the list. All you need to set is the selectedItem and then you can work with this:

<c:forEach items="${otherListOfData}" var="data">
    <c:if test="${data.id == dataToMatchOn.id}">
        <c:set var="selectedItem" value="${data}/>
    </c:if>
</c:forEach>

<p>From here on I can work with the selected item:</p>

${selectedItem.children}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM