如何在<h:datatable> </h:datatable>中以相反的顺序显示内容

时间:2013-07-22 13:13:53

标签: jsf-2 datatable reverse

我接受数组中的数据并使用<h:dataTable>在同一个屏幕中显示它。 如何以相反的顺序显示内容,即显示第一行中的最新条目?

以下代码可以反向显示nonDox.non_List

<h:body>
<h:panelGroup rendered="#{not empty dataBase}">
     <h:form id="nonDoxScanForm">
     <f:event listener="#{nonDox.validate_AccNo}" type="postValidate" />
      &nbsp;&nbsp;
     <table border="0"  class="InnerBox"    width="55%">
        <tr><th  colspan="7" align="Center" class="clsTitle">Non Dox Add</th></tr>
        <tr>
           <td>Delivery Date</td>
           <td >Consginee (F2) </td>
           <td>Weight (F3)</td>
           <td>SubBranch Code(F4)</td>
           <td >Consignment No (F10)</td>
           <td align="Center">(F12)</td>
        </tr>
        <tr>
           <td>  <p:calendar value="#{nonDox.delDate}" id="fDat" />    </td>
           <td><h:inputText size="20" id="fcon" value="#{nonDox.consignee}" /> </td>
           <td><h:inputText size="20" id="fweig" value="#{nonDox.weight}" >
           </h:inputText> </td>
           <td><h:inputText size="20" id="fsub" value="#{nonDox.subBranchCode}" >
           <f:validateLength  maximum="3"></f:validateLength>
           </h:inputText> </td>`enter code here`
           <td><h:inputText size="10" id="acno" value="#{nonDox.accNo}" onfocus="this.select()"  >
            </h:inputText>
           </td>
           <td> <h:commandButton value="Add" id="fAdd" action="#{nonDox.addAction}" onclick="return validate();"  />
           </td>
           <td> <h:commandButton value="Save" action="#{nonDox.saveAction}" >
           </h:commandButton>
           </td>
       </tr>
       <tr>
          <td colspan="7">
          <h:message for="acno"/>
          </td>
       </tr>
    </table>
    <h:dataTable value="#{  nonDox.non_List}" var="o"
     styleClass="order-table"
     headerClass="order-table-header"
     rowClasses="order-table-odd-row,order-table-even-row" width="55%"
     >
     <h:column>
        <f:facet name="header">Del Date</f:facet>
         #{o.cor_Date.substring(0, 10)}
     </h:column>
     <h:column>
        <f:facet name="header">consignee</f:facet>
         #{o.consignee}
     </h:column>
     <h:column>
        <f:facet name="header">Weight</f:facet>
        #{o.weight}
    </h:column>
    <h:column>
       <f:facet name="header">Rate</f:facet>
       #{o.rate}
    </h:column>
    <h:column>
       <f:facet name="header">subBranchCode</f:facet>
       #{o.subBranchCode}
   </h:column>
   <h:column>
      <f:facet name="header" >POD No</f:facet>
      #{o.accNo}
   </h:column>
   <h:column>
      <f:facet name="header">Action</f:facet>
      <h:commandLink value="Delete" action="#{nonDox.deleteAction(o)}" />
   </h:column>
 </h:dataTable>
 </h:form>
 <h:panelGroup >
     <h:panelGroup rendered="#{empty  dataBase}">
     <h1>Session Expired</h1>
     <h:link outcome="Login" target="CommonContent" >Login</h:link>
  </h:panelGroup>
  </h:body>

1 个答案:

答案 0 :(得分:2)

如果您在List中使用new ArrayList<Item>(),则很容易:使用Collections#reverse()

private List<Item> data;

@PostConstruct
public void init() {
    data = service.list();
    Collections.reverse(data);
}

// ...

只需按常规方式<h:dataTable value="#{bean.data}">引用它。

如果你在Item[]中使用数组,那么首先需要在Arrays#asList()的帮助下将其转换为List,以便将其提供给Collections#reverse() {1}}:

private List<Item> data;

@PostConstruct
public void init() {
    Item[] items = service.array();
    data = Arrays.asList(items);
    Collections.reverse(data);
}

// ...

或者只是以不需要在辅助bean中执行此转换步骤的方式重写服务方法。

关键是,您不应期望在视图中执行此作业。您应该以这样的方式准备模型,使其与视图所期望的完全一样。 <h:dataTable>本身不提供任何类似的设施。