2013-08-23 46 views
1

我正在構建一個應用程序,其中包含大量表(或表單),用於表示給定數據行的詳細信息。 有些是相當大的,它不是必須逐個添加字段(與處理程序,邏輯等)。從豆動態構建表

我想要的是有一個工廠能夠建立給定一個bean的表單(或表)。 我創建了一個相當不錯的工廠使用Java反射只發現GWT不支持它...

有沒有什麼能滿足我的需求?

回答

2

因爲GWT的編譯是單片(在編譯時可能沒有未知的類,但在運行時使用),這意味着可以生成代碼。

因爲可以生成它,這意味着您可以在使用所謂的deferred binding進行GWT編譯期間執行此操作。 GWT生成器可以對編譯時已知的類使用反射,它只是一個獨立的API而不是java.reflect(就像Java Annotation Processors也使用獨特的API一樣)。因此,您可以通過共同標識符來確定代中需要考慮的類(例如,它們都實現相同的標記接口,或者擴展相同的基類),併爲每個表生成一個表/表單,以及:

  • 與您編輯/呈現的對象的類型參數的接口,可以直接表示生成的表/表單;你會創建一個子接口修復的類型參數和GWT.create()你的接口,就像PlaceHistoryMapperWithFactory,UiBinderSimpleBeanEditorDriver一樣工作。
  • 一個工廠將返回給定的Class<?>對象的正確表/表格(使用級聯的if (klazz == Foo.class) { return new … } else if …);會的工作方式類似於RequestFactory的RequestContext.create()

所有你會看到你的代碼是:

  • 標記接口或基類識別的對象,可以是呈現
  • 的接口或生成的表格/表格的基類可能由工廠返回或由GWT.create()
  • 可能是工廠的接口或基類,您可以傳遞給GWT.create()來觸發發生器並取回生成的實現它