2010-12-23 58 views
1

我编程在Java中,我有我想JSTL迭代检查是否有其他元素有一定的相似性与当前对象的列表。我想在我的jsp中这样做,因为它只是一个显示问题。如何在一个JSTLç重复列属性组行:的forEach

让我们假设一个例子,并说我的对象有三个属性:id,lastname和firstname。 id是家庭的标识符,我想在HTML表格中显示列表,但是在迭代我的列表时我想检查列表的其余部分以查看是否有其他家庭成员在场,以便我可以在一个td标记中重新组合它们。

 
1 | TOTO | James 
2 | FOE | Cameron 
2 | FOE | Jessica 
1 | TOTO | Pat 
3 | SAMPLE | Bob 

预期结果:

<table> 
    <tr><td>1</td><td>TOTO</td><td>James, Pat</td></tr> 
    <tr><td>2</td><td>FOE</td><td>Cameron, jessica</td></tr> 
    <tr><td>3</td><td>SAMPLE</td><td>Bob</td></tr> 
</table> 

再次,这是一个基本的例子,你可能会告诉我重新集结我的家庭在其他物体在我的模型层,但我宁愿不要要做到这一点。


编辑:我暗示while循环,因为我的名单是由ID排序,所以我可以很容易地查了下元素。但其他解决方案对我来说会很好。

+0

你的例子中的列表看起来不是我命令的。 – dogbane 2010-12-23 10:52:07

回答

0

您可以在Map和拦截上得到处理lastnames的保持。

<table> 
    <jsp:useBean id="processed" class="java.util.HashMap" /> 
    <c:forEach items="${persons}" var="person"> 
     <c:if test="${empty processed[person.lastName]}"> 
      <c:set target="${processed}" property="${person.lastName}" value="true" /> 
      <tr> 
       <td>${person.familyId}</td> 
       <td>${person.lastName}</td> 
       <td>${person.firstName} 
        <c:forEach items="${persons}" var="other"> 
         <c:if test="${person.lastName == other.lastName and person.firstName != other.firstName}"> 
          , ${other.firstName} 
         </c:if> 
        </c:forEach> 
       </td> 
      </tr> 
     </c:if> 
    </c:forEach> 
</table> 

但我同意,这应该在(数据)模型方面完成,而不是在视图方面。

0

您的bean应该执行分组,而不是JSP。