首先,我Note在服务层中检索对象:
Note
List<Note> notes = this.getNotes();
然后我通过List的Notes向视图层和用于设定相同的初始值prevNote和currNote到的第一个元素List:
List
Notes
prevNote
currNote
<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``note
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和显示下Note具有不同的userCode(有点模拟group- by操作)。
userCode
group- by
关于如何执行此操作的任何提示以及为什么我收到此错误消息?
在 主体 中设置值c:set实际上会将其转换为对象的Stringusing toString()方法。该例外还暗示您不是在处理一个完全有价值的Note实例,而是在一个实例上String。
c:set
String
toString()
请改用value属性。
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>