2010-06-23 101 views
1

我想添加可排序標題到h:dataTable。我試圖按照http://balusc.blogspot.com/2006/06/using-datatables.html來做到這一點。以下呈現鏈接,但它什麼都不做。JSF 2.0可排序標題與h:datatable

list.xhtml 
       <h:dataTable value="#{iptableController.items}" var="item" border="0" cellpadding="2" cellspacing="0" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px"> 

        <h:column> 
         <f:facet name="header"> 
          <h:commandLink actionListener="#{iptableController.sortDataList}"> 
           <f:attribute name="sortField" value="getID"/> 
           <h:outputText value="#{bundle.ListIptableTitle_iptableId}"/> 
          </h:commandLink> 
         </f:facet> 
         <h:outputText value="#{item.iptableId}"/> 
        </h:column> 

這是我試圖使用的控制器的一部分。

iptableController 

public void sortDataList(ActionEvent event) { 
    String sortFieldAttribute = getAttribute(event, "sortField"); 

    // Get and set sort field and sort order. 
    if (sortField != null && sortField.equals(sortFieldAttribute)) { 
     sortAscending = !sortAscending; 
    } else { 
     sortField = sortFieldAttribute; 
     sortAscending = true; 
    } 

    // Sort results. 
    if (sortField != null) { 
     Collections.sort(getFacade().findAll(), new DTOComparator(sortField, sortAscending)); 
    } 
} 

DTOCompartor與鏈接中的DTOCompartor完全相同。

我覺得我已經完全走錯了路,但一直無法找到更好的指導。任何幫助都將不勝感激。

編輯:

我打開了更精細的過濾,並能夠看到一個問題。我不確定是什麼原因造成的,但看起來控制器正在被添加兩次,並被分配到<error>.包。我重命名了該文件,並已解決。清理一些其他問題(調用不存在的功能等)後,我堅持用錯誤:

SEVERE: JSF1073: javax.faces.event.AbortProcessingException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=j_idt12:j_idt22, Message=/iptable/List.xhtml @26,88 actionListener="#{Controller.sortList}": java.lang.RuntimeException: Cannot compare test, test with t, test1 on [getiptableID] 
SEVERE: /iptable/List.xhtml @26,88 actionListener="#{Controller.sortList}": java.lang.RuntimeException: Cannot compare test, test with t, test1 on [getiptableID] 

在DTOComparator評論指出://如果出現這種異常,那麼它通常是一個錯誤的DTO開發人員。

我干將看起來都像:

public String getIptableName() { 
    return iptableName; 
} 

回答

1

The following renders a link but it doesn't do anything.

的常見原因是,它不是被放置在<h:form>內。沒有它,客戶端不能向服務器提交任何內容。將<h:dataTable>放在<h:form>之內,它應該可以工作。

如果這不是原因,請檢查this answer以獲取其他可能原因的列表。


更新按您的更新:

Cannot compare test, test with t, test1 on [getiptableID] 

這意味着,有一個名爲getiptableID沒有消氣。不應該是getIptableID

+0

感謝您的快速響應。 list.xhtml定義了一個表單:。 我檢查了您提供的鏈接中的1-3,我很確定這些都沒有發生。我不知道如何檢查4-7。 這裏是完整的文件:http://pastebin.com/S4hpS1Gg 和完整的控制器:http://pastebin.com/Kz6T3UZE 完整的實體:http://pastebin.com/6tN93Dui – duallain 2010-06-23 21:24:40

+1

然後它應該有完成*某事*。服務器是否被打過? JSF生命週期的哪些階段已被處理? – BalusC 2010-06-23 21:27:14

+0

我已經在上面添加了更多信息。它正在擊中服務器,只是沒有對我做任何可見的事情。 – duallain 2010-06-23 23:08:02