2010-11-24 50 views
0

問候,JSF的dataTable顯示行的固定數量

上下文是MyFaces的2.0.2,可能還加入戰斧20-1.1.10

我已經創建數據表(目前的h:dataTable,但也可以是使用Tomahawk的t:dataTable)在後臺bean中顯示List<MyObject>的某些特定屬性。我通過僅返回列表的subList進行分頁,並且還通過單擊列標題進行排序。

我需要做的下一件事是確保表總是顯示固定數量的行。例如,如果我的頁面大小爲5,並且列表中有12個項目,則需要第3頁顯示最後兩個項目以及3個空白行。

打表的最後一頁時,我曾經試圖「墊」的subListmyObject空值都空和實例,但是這導致了ConcurrentModificationException(視圖試圖getDisplayList甚至分頁方法是仍然增加額外的值)。然後,我嘗試以相同的方式填充主列表,但後來在我的排序功能上得到了NullPointer(在後視中是一個不容易理解的問題)。另外,這些東西都是在支持者身上增加的開銷,當我寧願在xhtml視圖中執行此操作時。

(h:/t:)dataTable確實有rows屬性,但是它指定了顯示的最大行數,而不是最小值,因爲我需要。

想法嗎?

回答

0

請勿填寫子列表。填寫名單。優選地,在豆中取回之後立即進行。

+0

你會注意到這是我嘗試過的一件事。結果是排序函數上的NullPointer異常。我使用匿名內部Comparator類,並且函數「public int compare(MyObject obj1,MyObject obj2)」的聲明是如果對象本身爲null時拋出異常的地方。如果這些對象不是null而是它們的值,那麼當我有這個函數時拋出異常,比如說「return obj1.getStringValue()。compareTo(obj2.getStringValue());」 – cobaltduck 2010-11-25 15:30:15

0

該解決方案在這裏是墊主列表,而不是子表,使用沒有空對象,但其屬性爲空,並添加一個空檢查到比較:

if (obj1.getSomeValue() == null) { 
    return +1; 
} 
else if (obj2.getSomeValue() == null) { 
    return -1; 
} 
else { 
    // primary sorting code 
} 

保證空項目總是最後。完美的作品。

BalusC確實給了我正確的方向,所以我接受他的答案。