如何在hx:dataIterator(ibm-jsf)上设置排序?

时间:2014-08-25 09:49:15

标签: jsf

我在官方文档中找不到强制命令hx:dataIterator组件中显示元素的排序。

这是我的.jsp片段:

<h:form id="tableForm" style="form">
  <h:panelGrid id="tableGridBooks">
    <hx:dataTableEx>
...

<hx:columnEx id="columnEx9">
    <f:facet name="header">
       <h:panelGroup styleClass="headerClass">
            <h:outputText id="text91" styleClass="outputText" value="#{msg.lblBooks}"></h:outputText>
       </h:panelGroup>
    </f:facet>
    <hx:dataIterator value="#{varwarehouse.listBooks}" var="book" id="dataIterator1">
            <h:panelGrid columns="4">
                <h:outputText id="text91" styleClass="outputText" value="#{book.bookId}"></h:outputText>
                <h:outputLink id="link91" rendered="#{not empty book.bookType}">
                    <h:outputText id="text92" value="#{msg[book.bookType.tag]}" styleClass="outputText"></h:outputText>
                    <hx:behavior event="onclick" behaviorAction="get;show;stop" id="behaviour1" 
                      targetAction="subview1:panelForm1:editBookDialog;subview1:panelForm1:editBookDialog"
                      onActionFunction="setvalue('subview1:panelForm1:newItem', 'edit'); setvalue('subview1:panelForm1:itemId', '#{book.bookId}');">
                    </hx:behavior>
                </h:outputLink>
                <h:outputLink id="link92" rendered="#{not empty book.publisherType}">
                    <h:outputText id="text93" value="#{msg[book.publisherType.tag]}" styleClass="outputText"></h:outputText>
                    <hx:behavior event="onclick" behaviorAction="get;show;stop" id="behaviour12"
                      targetAction="subview1:panelForm2:editBookDialog;subview1:panelForm2:editBookDialog"
                      onActionFunction="setvalue('subview1:panelForm2:newItem', 'edit'); setvalue('subview1:panelForm2:itemId', '#{book.bookId}');">
                    </hx:behavior>
                </h:outputLink>
               <h:outputText id="bookStatus" styleClass='#{book.bookStatus eq "AVAILABLE" ? "iconTrue" : "iconFalse"}'/>
               <h:commandLink styleClass="commandlink" rendered="#{(book.publisherType eq 'A' or book.publisherType eq 'B')}"
                              action="#{pc_PrintBook.printToPdf}" type="submit" value="#{msg.lblPDF}" immediate="true">
                  <f:param name="bookId" value="#{book.bookId}" />
                  <f:param name="warehouseId" value="#{varwarehouse.warehouseId}" />    
               </h:commandLink>                                                                                         
             </h:panelGrid>
    </hx:dataIterator>
</hx:columnEx>
...  
   </hx:dataTableEx>
  </h:panelGrid>
 </h:form>

在业务逻辑方面,重新检查书籍列表的功能(在上面的jsp中:varwarehouse.listBooks)已按书籍创建日期降序和bookId升序设置排序。
但是,当页面被呈现时,bookId没有正确地排序特定仓库中的书籍项目列表(它应该是升序的,但对于某些仓库,它是下降的,而其他仓库则是升序的。) 所以,因为我有正确的排序设置/生成

(ORDER BY warehouse.created_date DESC, book.book_id ASC)

,我认为问题是hx:dataIterator组件 我无法在任何地方找到如何能够强制某些物品在该组件上的订购? 我很天真,并认为它将保留书籍列表中存在的项目的排序(java.lang.List)。

拜托,非常感谢任何帮助 我希望有人知道答案,或者看到我在上面的jsp中遗漏的东西。

提前谢谢你,
最好的问候,
mismas

1 个答案:

答案 0 :(得分:0)

对不起伙计们,
需要一段时间才能注意到问题不在jsf中,而是在使用java Set接口时没有任何订购保证:D。
解决方案是使用Collections.sort ...来订购它 Tnx无论如何:)