2012-05-15 25 views
1

好吧,我現在真的被卡住了。我有一個h:datatable,獲取行細節的唯一方法似乎是DataModel#getRowData()。不幸的是,需要包裝必要數據的ListDataModel是不可序列化的,所以不適用於GAE,我真的需要它工作!有沒有人有任何關於任何解決方法或使其發揮作用的方法有任何想法。 非常感謝!ListDataModel不可序列化==不會在GAE上運行

回答

1

標記屬性transient(這樣它將在序列化過程中被跳過)並在getter中引入延遲加載。

E.g.

private List<Item> itemList; 
private transient DataModel<Item> itemModel; 

public DataModel<Item> getItemModel() { 
    if (itemModel == null) { 
     itemModel = new ListDataModel<Item>(itemList); 
    } 

    return itemModel; 
} 

還有其他方法來檢索當前行。另請參閱How can I pass selected row to commandLink inside dataTable?

+0

完美完美thx很多。我只是有一個問題,因爲我用你的答案和修改了一下,其實我沒有使用「List 」我直接做了: 私有瞬態DataModel 模型; public DataModel getModel(){ \t if(model == null){ \t model = new ListDataModel (list of people); \t} \t return model; \t} 關於在我的情況下傳遞參數的不同方式可能是由於我缺乏知識,但我會說這是因爲我使用了帶有ajax的selectonemenu,因此看起來不配合您提供的選項。 –

+0

您的具體問題並不清楚,但我認爲您需要根據ajax操作偵聽器方法中的新項目重新創建'itemModel'。 – BalusC

+0

好吧,實際上沒有問題,我只是想告訴你,它沒有任何itemModel的工作,只是想知道是否有任何解決方案的缺點。 –