![](/img/trans.png)
[英]How to convert list of group-by objects into html unordered list in Java?
[英]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();
然后我通过List
的Notes
到视图层和相同的初始值设置prevNote
和currNote
到的第一个元素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 ".
我要在此处执行的操作是检查prevNote
和currNote
是否包含相同的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.