从bean动态构建表

时间:2013-08-23 16:00:29

标签: java gwt javabeans

我正在构建一个包含许多表(或表单)表示给定数据行详细信息的应用程序。 有些是非常大的,不一定要逐个添加字段(使用处理程序,逻辑等)。

我想要的是让工厂能够在给定bean的情况下构建表单(或表)。 我使用Java反射创建了一个非常漂亮的工厂,但却发现GWT不支持它......

有什么能满足我的需求吗?

1 个答案:

答案 0 :(得分:2)

因为GWT的编译是 monolithic (可能没有在编译时未知但在运行时使用的类),这意味着可以生成代码。

因为它可以生成,这意味着您可以使用所谓的deferred binding在GWT编译期间执行此操作。 GWT生成器可以对编译时已知的类使用反射,它只是一个与java.reflect不同的API(就像Java Annotation Processors也使用不同的API一样)。

因此,您可以使用通用分母来标识生成中需要考虑的类(例如,它们都实现相同的标记接口,或扩展相同的基类)并为每个生成一个表/表,并且:或者:

  • 具有您编辑/渲染的对象的类型参数的接口,可以直接表示生成的表/表单;您可以创建一个子界面修复类型参数和GWT.create()您的界面,就像PlaceHistoryMapperWithFactoryUiBinderSimpleBeanEditorDriver一样。
  • 一个工厂,它将为给定的Class<?>对象返回正确的表/表单(使用级联if (klazz == Foo.class) { return new … } else if …);这与RequestFactory的RequestContext.create()
  • 类似

您从代码中看到的只有:

  • 标识可以呈现的对象的标记接口或基类
  • 生成的表单/表的接口或基类,由工厂或GWT.create()
  • 返回
  • 可能是工厂的接口或基类,您可以传递给GWT.create()来触发生成器并返回生成的实现