【问题标题】:How to display contents in reverse order in <h:dataTable>如何在 <h:dataTable> 中以相反的顺序显示内容
【发布时间】:2013-07-22 13:13:52
【问题描述】:

我接受 Array 中的数据并使用 &lt;h:dataTable&gt; 在同一屏幕上显示它。 如何倒序显示内容,即在第一行显示最新的条目?

下面是代码,我可以以相反的顺序显示 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>

【问题讨论】:

    标签: jsf-2 datatable reverse


    【解决方案1】:

    如果您使用List 和new ArrayList&lt;Item&gt;(),这很简单:使用Collections#reverse():

    private List<Item> data;
    
    @PostConstruct
    public void init() {
        data = service.list();
        Collections.reverse(data);
    }
    
    // ...
    

    只需按照通常的方式在&lt;h:dataTable value="#{bean.data}"&gt; 中引用它即可。

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

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

    或者只是重写服务方法,这样您就不需要在支持 bean 中执行此转换步骤。

    关键是,您不应该期望在视图中执行这项工作。您应该以与视图所期望的完全一样的方式准备模型。 &lt;h:dataTable&gt; 本身不提供任何类似的设施。

    【讨论】:

    • 你能@BalusC 解释一下service.array() 是什么吗?什么是service
    • @Orbita:只是与数据库交互并返回所需数据的业务服务类。通常是 EJB。我的答案中的代码纯粹是示例性的。您可以使用不同的类/变量/方法名称。但逻辑完全一样。
    猜你喜欢
    • 2019-12-24
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2018-06-20
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多