jsp通过s:iterator实现一对多展示

本文介绍了如何利用Struts2的`s:iterator`标签在JSP页面上以表格形式展示会议室和其多个申请记录的一对多关系。关键在于通过比较当前记录的ROOM_ID与上一条的差异,结合SQL的分析函数来确定`rowspan`,从而实现数据的正确布局。在分页显示时,这种方法可能面临挑战。

<tr>
          <th width="8%">
           序号
          </th>
          <th width="20%">
           会场名称
          </th>
          <th width="26%">
           开始时间
          </th>
          <th width="26%">
           结束时间
          </th>
          <th width="20%">
           申请状态
          </th>
         </tr>
         <%int index = 1;%>
         <s:iterator var="s" value="#request.usageList">
         <tr>
          <td style="text-align:center">
           <%=index++ %>
          </td>
          <s:if test="#strid!=#s.room_id">
            <s:set id="strid" value="%{#s.room_id}"/>
           <td rowspan="<s:property value="TOTAL_ROWS"/>" id="<s:property value="ROOM_ID"/>"   style="text-align:center">
            <a href="javascript:window.location.href='<%=path%>/conference_room_view.action?room_id=<s:property value="ROOM_ID"/>&opType=2';">
             <s:property value="ROOM_NAME"/>&nbsp;
            </a>
           </td>
          </s:if>
          <td style="text-align:center">
           <s:date name="START_DATE" format="yyyy-MM-dd HH:mm:ss"/>&nbsp;
          </td>
          <td>
           <s:date name="END_DATE" format="yyyy-MM-dd HH:mm:ss"/>&nbsp;
          </td>
          <td style="text-align:center">
           <%=CommonMethod.getConferenceStatus((String)request.getAttribute("STATUS")) %>&nbsp;
          </td>
         </tr>
         </s:iterator>

 

解释一下吧,省的将来自己看的时候都想不起来了。

 

关键是红色部分,该列表时展示各个会议室的全部申请,因此,会议室和申请记录时一对多的关系。

每次循环都判断一次,看看当前记录中的ROOM_ID是不是和上一次的一样,如果一样则会议室名称的TD不构造。如果不一样,说明是新会议室,则声称TD。

 

rowspan="<s:property value="TOTAL_ROWS"/>"

这个是灵魂。

在第一次生成TD的时候就设置TD的占得行数,这样就能实现一对多的展示了。但是这个TOTAL_ROWS怎么来,就要靠SQL的分析函数了:

COUNT(ROWID) OVER (PARTITION BY ROOM_ID) TOTAL_ROWS

 

在查询项中添加上面这一项,就OK了。具体什么意思,自己去看看SQL的解释吧(ORACLE)。

 

美中不足的是,如果是分页显示的话效果不太理想。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值