以下是两个列表的遍历
首先,我需要查找第二个列表是否包含与第一个列表 ID 匹配的内容。所以不必要地我需要在第一次迭代中申请循环
<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>
一旦附加的值存在变为真,那么我就会解析第二个列表并显示所需的结果。
代码看起来很破旧。如果我可以在 JSP 中使用 Lambda 表达式或 Stream API 或任何其他方法来处理这种情况,somone 会提供帮助吗?
[1],我不建议尝试在您的 JSP 中解决这个问题,但我能想到其他选项。
你可以用一个静态方法创建一个Java类,它正在做你想做的事情,甚至可以根据你的需求调整输出。
public class CustomTag {
public static List<> doTagAction(arguments....) {
/*
* put your logic here and return a list or what you need
*/
}
}
这种静态方法可以通过 Taglib [2] 轻松地在您的 jsps 中提供。
<?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>
您可以简单地通过标签引用在您的 JSP 中使用!
[1] 如何避免 JSP 文件中的 Java 代码?
[2] https://www.tutorialspoint.com/jsp/jsp_custom_tags.htm