2013-04-09 11 views
0

感謝您對你的關注,我有這個奇怪的問題,我解決不了。我使用mongoDB的內容映射了wicket來構建DataTable。另外,我正在使用Tomcat7和Eclipse檢票口的DataTable getSort狀態不會改變

但是,每次選擇要排序的列時,數據提供程序的迭代器方法中的getSort()方法始終會返回與默認值相同的值。我的網頁

public SortableGalaxyDataProvider() { 

    setSort("name", SortOrder.ASCENDING); 
} 

@Override 
public Iterator<? extends Galaxy> iterator(long first, long count) { 

    SortParam<String> sort = getSort(); //is always the same 

初始化完成這樣

[編輯]我使用Spring注入,所以在GalaxyTable的網頁我有。

@Inject 
SortableGalaxyDataProvider galaxyProvider; 

public GalaxyTable() { 

    List<IColumn<Galaxy, String>> columns = new ArrayList<IColumn<Galaxy, String>>(); 

    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Name"),"name","name")); 
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Type"),"type","type")); 
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Ancestors"),"ancestors","ancestors")); 
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Radius"),"radius","radius")); 


    add(new DefaultDataTable<Galaxy, String>("galaxies", columns, galaxyProvider, 10)); 
} 

下面是用於表

<wicket:extend> 
<table cellspacing="0" wicket:id="galaxies">[table]</table> 
</wicket:extend> 

我找了很多例子周圍的HTML行,似乎沒有人得到了同樣的麻煩,初始顯示是正常的,我可以通過旅行內容但它永遠不會被排序導致排序狀態不變。

任何線索?

感謝

+0

你的代碼看起來不錯,你能提供一個顯示問題的快速入門嗎? – 2013-04-09 10:27:06

+0

我不知道該怎麼做:)。代碼相對簡單,沒有比我展示的更多。我在第一篇文章中添加了一些額外的信息 – StackHola 2013-04-09 18:20:19

回答

0

方式一:

注入DAO到頁面,並在數據提供作品的構造函數使用它。

@Inject 
    //SortableGalaxyDataProvider galaxyProvider; 
    UniversDAO dao; 

    public GalaxyTable() { 

     List<IColumn<Galaxy, String>> columns = new ArrayList<IColumn<Galaxy, String>>(); 

     columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Name"),"name","name")); 
     columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Type"),"type","type")); 
     columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Ancestors"),"ancestors","ancestors")); 
     columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Radius"),"radius","radius")); 


     //add(new DefaultDataTable<Galaxy, String>("galaxies", columns, galaxyProvider, 10)); 
     add(new DefaultDataTable<Galaxy, String>("galaxies", columns, new SortableGalaxyDataProvider(dao), 10)); 
    } 

但是我寧願喜歡它與常規春季注射一起使用。塞德里克說,這個問題可能就是這個包裝彈簧。

1

我覺得你的問題可以通過使用SpringBean引起的。它的工作方式,我認爲有一個自動生成的代理放入注入點,因此,當Wicket試圖使用內省設置排序狀態時,它會在代理中執行(或無法執行)。另一件可能發生的事情是,Spring在兩個Ajax請求之間重新創建GalaxyProvider bean,排序狀態也會丟失。

我會嘗試在你的代碼擺脫注射的,看看它做。固定彈簧注入問題

+0

我認爲這可能是答案。當Wicket實際嘗試設置排序狀態以確認或減弱這種情況時,我正在尋找斷點。 – StackHola 2013-04-10 13:13:14

+0

該項目現在使用Play Fwk,這個問題不會再進一步​​。 – StackHola 2013-09-18 18:46:07