今天早上我问了这个问题,并得到了一个非常好的答案。我现在正在尝试对设计进行原型设计,并且遇到了类似(但不相同)的问题。本质上,我试图拥有一个 100% 配置驱动的 GWT UI,其中对 DB 的更改可以产生完全不同的 UI,但无需任何代码更改。
我的架构很简单:
- 我将使用单独的工具(或首先手动)生成 .xul (XUL) 文件并将其保存到数据库;可能是像 Mongo 这样的文档数据库或类似的东西
- 在服务器端,我将编写一个
XulParser
从数据库中读取 XUL 文件并将其转换为ContainerProxy
实例 的程序- A
ContainerProxy
是我的“代理”,相当于 acom.google.gwt.user.client.ui.Panel
或类似的东西;它只是一个包含其他小部件代理列表的 bean/POJO(请参见下面的代码片段) - 例如,我可能有一个定义
Button
如下的 XUL 文件 - 这
ButtonProxy
将被添加到ContainerProxy
(以及同一容器/视图/面板中的任何其他 UI 小部件)
- A
- 在客户端,我将查询
ContainerProxy
不知何故 (???),并将其从服务器上拉下来。 - 然后,我将有一个机制,将 的每个
ContainerProxy
子项(ButtonProxy
等)转换为实际的 UI 小部件。
这样,起初我可以将某个 XUL 文件放入数据库,而 UI 上可能只包含“立即订购”按钮。但是以后,我可能想要使用完全不同的 UI,所以我设计了一个不同的 XUL 文件,更新了数据库中的文档,并且 - 瞧 - 所有用户的 UI 都会更改,而无需任何代码更改。请注意:我知道这不是一种正常的做事方式:我有一个特殊的用例,我需要这种配置驱动的 UI。
为了帮助阐明 XUL 解析过程:
<button id="order" label="orderNow" clickHandler="org.myapp.OrderButtonHandler" />
after the XulParser reads the above snippet, we get:
ButtonProxy orderButton = new ButtonProxy("order", "OrderNow");
orderButton.addClickHandler(new OrderButtonHandler());
无论如何,我的问题:
- 我需要在客户端做些什么来查询我的
ContainerProxy
? 任何人都可以提供伪代码来帮助我将其可视化吗? - 一旦我有了
ContainerProxy
客户端,我可以使用哪些 UI 机制将代理类转换为实际的 UI 小部件?UIBinder 可用吗?同样,有人可以提供一些伪代码吗?
在此先感谢您的帮助!