繁体   English   中英

如何在循环遍历List时跟踪先前和当前值,从而在JSTL视图层中模拟分组方式?

[英]How to simulate a group-by in JSTL view layer by keeping track of previous & current values while looping over a List?

首先,我在服务层中检索Note对象:

List<Note> notes = this.getNotes();

然后我通过ListNotes到视图层和相同的初始值设置prevNotecurrNote到的第一个元素List

<c:forEach items="${notes}" var="note" begin="0" end="1" step="1">
    <c:set var="prevNote">${note}</c:set>
    <c:set var="currNote">${note}</c:set>
</c:forEach>

然后,我遍历List并将prevNote设置为currNote并将currNote设置为currNote中的当前注释项( note ):

<c:forEach items="${notes}" var="note">

    <c:set var="prevNote">${currNote}</c:set>
    <c:set var="currNote">${note}</c:set>

    prev:<c:out value="${prevNote.userCode}"/>
    curr:<c:out value="${currNote.userCode}"/>

</c:forEach>

但是,当我运行它时,我收到以下错误消息:

    Unable to find a value for "note" in object of 
    class "java.lang.String" using operator ".

我要在此处执行的操作是检查prevNotecurrNote是否包含相同的userCode值-如果它们这样做,我想跳过List的当前元素,并显示具有不同userCode的下一个Note (模拟group-by操作) )。

关于如何执行此操作的任何提示以及为什么我收到此错误消息?

c:set 主体中设置值实际上将使用对象的toString()方法将其转换为String 该例外还暗示您不是在处理一个值得使用的Note实例,而是在一个String实例上。

请改用value属性。

<c:set var="prevNote" value="${note}" />
<c:set var="currNote" value="${note}" />

关于您的功能要求:

我要在此处执行的操作是检查prevNote和currNote是否包含相同的userCode值-如果它们这样做,我想跳过列表中的当前元素,并显示具有不同userCode的下一个Note(模拟分组操作) )。

仅将当前注释存储在循环末尾就足够了。 例如

<c:forEach items="${notes}" var="note">
    <c:if test="${empty prevNote or note.userCode != prevNote.userCode}">
         <c:out value="${note.userCode}" />
    </c:if>
    <c:set var="prevNote" value="${note}" />
</c:forEach>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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