2014-10-27 106 views
0

我有一個應用程序,廣泛使用編輯框架。現在我已經開始添加一項新功能了:如果用戶編輯實體,我想記錄哪些更改已經完成,並將它們存儲在單獨的數據存儲實體中。這需要知道一個字段是否已更改,字段名稱以及其更改的值。GWT編輯:如何記錄對字段和子編輯器的更改? (RequestFactory?)

這是想什麼,我來實現:

  1. 應用程序調用編輯(豆);
  2. 用戶進行更改,調用flush()並將數據發送回服務器。
  3. 在服務器處理程序中,來自bean的更改發送到processChanges(List<String> paths),然後processChanges(List<String> paths)創建並存儲「field foo」更改爲「bar」的記錄,依此類推。
  4. 實體被保存,覆蓋現有實體。

我使用GWTP並且當前使用RPC命令模式。我已經讀了一些關於RequestFactory的信息,據我瞭解,它的主要優點之一是它只將名爲「deltas」的已更改字段發送回服務器以最小化有效負載,所以我想知道是否使用RequestFactory更適合我的應用程序?

道歉 - 我一直在閱讀GWT文檔和Javadocs編輯框架和RequestFactory,但我仍然很困惑。 RequestFactoryEditorDriver.getPaths()似乎可能是我需要的,但任何建議或指針非常讚賞。

我可能會觀察客戶端的變化,但這似乎是一個壞主意。

+0

我沒有看到100%這與GWT編輯器或GWT有什麼關係。 聽起來更像是數據庫/數據存儲問題的重組,例如,保存實體的歷史。 – 2014-10-27 13:48:12

+0

我想你誤解了我的問題。在我調用'EditorDriver.flush()'時,如何重構我的模式以幫助我找出哪些字段的內容已更改?我重新保存同一個實體,而不是每次都創建一個新副本,因此需要單獨記錄更改。 – slugmandrew 2014-10-27 14:07:13

回答

2

我相信你能做到這一點使用EditorVisitor,類似於編輯框架內部使用的DirtCollector訪問者(看看在PathCollector如何收集在一個訪問者路徑)。

我想通過訪問層級只是調用edit()(這是由DirtCollector已經內部完成,但沒有辦法來訪問它的結果後,收集初始值開始,而且只收集葉值反正)。
然後你可以打電話flush()看看是否有錯誤,並可能驗證你的對象,看看是否一切正常。然後再次訪問層次結構以收集更改(針對之前收集的初始值),以便將它們發送到服務器。

+0

謝謝托馬斯。看起來這是一個簡單的任務,所以我現在要離開它。我很快就會重構我的所有數據綁定代碼,所以也許我會去請求供應商,然後看起來真的很有用。 – slugmandrew 2014-10-28 11:14:05

+0

我的回答並沒有完全鏈接到RequestFactory,它只是**使用編輯器框架。 – 2014-10-28 12:59:54

+0

我明白,但是跟蹤字段名稱和使用'RequestFactory'代理編輯哪些名稱,而不是使用'EditorVisitor'來自己遍歷樹會更容易嗎? – slugmandrew 2014-10-28 13:17:29