使用seam做了個項目,展示一個自訂欄表輸出,分別定義表格標題List headerList和資料List<List> dataList,然後實現兩種展示方式。一種是普通表格方式,一條資料在一行顯示,這樣我們可以使用rich:dataTable ,然後自訂迭代部分可以用rich:columns 來實現,注意index是表示每行資料的行索引,代碼如下:
Xhtml代碼 {
dp.sh.Toolbar.CopyToClipboard(this);return false;
}" href="http://writeblog.csdn.net/#">
- <rich:dataTable value="#{orderResDetailHome.dataList}" var="list" rows="10" style="width:100%;" rowKeyVar="rowNum">
- <rich:column>
- <f:facet name="header">序號</f:facet>
- #{rowNum+1}
- </rich:column>
-
- <rich:columns value="#{orderResDetailHome.headerList}" var="dataHeader" index="idx">
- <f:facet name="header">#{dataHeader}</f:facet>
- #{list[idx+2]}
- </rich:columns>
- </rich:dataTable>
<rich:dataTable value="#{orderResDetailHome.dataList}" var="list" rows="10" style="width:100%;" rowKeyVar="rowNum"> <rich:column><f:facet name="header">序號</f:facet>#{rowNum+1}</rich:column><rich:columns value="#{orderResDetailHome.headerList}" var="dataHeader" index="idx"> <f:facet name="header">#{dataHeader}</f:facet>#{list[idx+2]}</rich:columns></rich:dataTable>
其中#{list[idx+2]}中加2是因為資料列開始兩列資料多輸出用作其他。
還有一種展示方式,沒條資料不是在一行顯示,而是把每條資料放到一個grid中去,然後依次顯示,但是這樣的話迭代部分的資料就無法使用rich:columns 來實現了,可以考慮使用c:forEach,其中可以定義varStatus="status",
取#{status.index}就可以獲得每行資料的行索引,這樣就方便實現了,代碼如下:
Xhtml代碼 {
dp.sh.Toolbar.CopyToClipboard(this);return false;
}" href="http://writeblog.csdn.net/#">
- <rich:dataGrid var="list"
- columns="1"
- elements="10"
- rowKeyVar="rowNum"
- value="#{orderResDetailHome.dataList}">
-
- <h:panelGrid columns="1">
-
- <s:decorate template="/layout/display.xhtml">
- <ui:define name="label">序號</ui:define>
- #{rowNum+1}
- </s:decorate>
-
- <c:forEach var='dataHeader' items='#{orderResDetailHome.headerList}' varStatus="status">
- <s:decorate template="/layout/display.xhtml">
- <ui:define name="label">#{dataHeader}</ui:define>
- #{list[status.index+2]}
- </s:decorate>
- </c:forEach>
-
- </h:panelGrid>
- </rich:dataGrid>
<rich:dataGrid var="list" columns="1" elements="10" rowKeyVar="rowNum" value="#{orderResDetailHome.dataList}"> <h:panelGrid columns="1"> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">序號</ui:define> #{rowNum+1} </s:decorate> <c:forEach var='dataHeader' items='#{orderResDetailHome.headerList}' varStatus="status"> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">#{dataHeader}</ui:define> #{list[status.index+2]} </s:decorate></c:forEach></h:panelGrid></rich:dataGrid>
後者適合在小螢幕裝置上展示。