2010-01-22 58 views
0

我創建了一個包含tobago表的Java web應用程序。我現在試圖通過使用sortActionListener屬性來覆蓋工作表的排序機制。覆蓋java tobago表單排序方法不顯示數據

當我點擊一列時,我的排序方法就開始了。我可以讀出列名並做一些SQL來獲取我現在要顯示的數據。排序由SQL查詢完成。問題是,表單不會顯示數據,它是空的。

這是錯誤消息我得到:

org.apache.myfaces.custom.ajax.api.AjaxPhaseListener - 找到的組件沒有ajaxComponent

有沒有人一個想法如何解決這個?我的表必須是啓用了ajax的東西,或者出了什麼問題?

在此先感謝!

UPDATE:

我已經發現該錯誤信息是由於戰斧的沙箱庫和多巴哥之間的衝突。刪除沙箱庫後,錯誤消息消失。儘管如此,我仍然有問題的觀點。

如果我手動移動事件處理程序,一切正常,因爲jsp頁面將在事件處理程序後重新加載。太棒了。但如果我自己運行代碼而不執行手動步驟,則jsp頁面不會重新加載,因此我無法看到數據。

爲什麼會這樣,我該如何說服我的代碼刷新jsp頁面,從而刷新頁面? ;)

回答

0

爲了顯示結果這裏有必要與紙張本身互動 - 這在某種程度上是有道理的;)

List<SheetData> sheetData = (List<SheetData>) sheet.getValue(); 

... performing SQL query ... 

sheetData = sqlresult; 

這一切;)獲取紙張的價值,執行SQL查詢並將結果發送到sheetData對象。該工作表完成後將刷新。

但我決定擺脫SQL查詢,因爲它需要很多時間(非常龐大而複雜的數據庫,不要問...)。我現在通過創建一個比較器來展開。

Comparator<SheetData> comparator = null; 

comparator = new Comparator<SheetData> { 

    public int compare(SheetData sd1, SheetData sd2) { 

     int rc = 0; 

     if (rc == 0) { 
      rc = sd1.getString("Field").compareTo(sd2.getString("Field")); 
     } 

     if (rc == 0) { 
      rc = sd1.getString("Field2").compareTo(sd2.getString("Field2")); 
     } 

     return rc; 
    } 
}; 

Collections.sort(sheetData, comparator); 

比較可以排序的許多領域,因爲我想和它的快;)您還可以看到紙張的狀態(升/降)的sortcolumn,將與我的第一種方法顯示不中(SQL查詢)。