Java GWT:查询代理UI类并将其转换为小部件
今天早上我问了一个问题,得到了一个非常好的答案。我现在正在尝试设计原型,遇到了一个类似(但不相同)的问题。从本质上讲,我试图拥有一个100%配置驱动的GWT UI,其中对DB的更改可以产生完全不同的UI,但不需要任何代码更改 我的架构很简单:Java GWT:查询代理UI类并将其转换为小部件,java,gwt,proxy,uibinder,Java,Gwt,Proxy,Uibinder,今天早上我问了一个问题,得到了一个非常好的答案。我现在正在尝试设计原型,遇到了一个类似(但不相同)的问题。从本质上讲,我试图拥有一个100%配置驱动的GWT UI,其中对DB的更改可以产生完全不同的UI,但不需要任何代码更改 我的架构很简单: 我将使用一个单独的工具(或者首先手动)生成一个.xul(xul)文件并将其保存到数据库中;可能是像Mongo或类似的文档数据库 在服务器端,我将编写一个XulParser,从数据库中读取XUL文件,并将其转换为ContainerProxy实例 Cont
- 我将使用一个单独的工具(或者首先手动)生成一个.xul(xul)文件并将其保存到数据库中;可能是像Mongo或类似的文档数据库
- 在服务器端,我将编写一个
,从数据库中读取XUL文件,并将其转换为XulParser
实例ContainerProxy
是我的“代理”,相当于ContainerProxy
或类似的东西;它只是一个bean/POJO,包含其他小部件代理的列表(请参阅下面的代码片段)com.google.gwt.user.client.ui.Panel
- 例如,我可能有一个XUL文件,它定义了一个
,如下所示按钮
- 此
将添加到ButtonProxy
(以及同一容器/视图/面板中的任何其他UI小部件)ContainerProxy
- 在客户端,我将以某种方式查询
(?),并将其从服务器上拉下来ContainerProxy
- 然后,我将有一个机制,将
的每个子项(ContainerProxy
等)转换为实际的UI小部件按钮proxy
<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());
在XulParser读取上述代码段后,我们得到:
ButtonProxy orderButton=新的ButtonProxy(“订单”、“订单现在”);
addClickHandler(neworderButtonHandler());
无论如何,我的问题是:
ContainerProxy
,我需要做什么?有人能提供伪代码来帮助我可视化它吗ContainerProxy
,我就可以使用什么UI机制将代理类转换为实际的UI小部件?有活页夹吗?再说一次,有人能提供一些伪代码吗在此提前感谢您的帮助 这里有一点代码想法,可以实现您想要的功能。我还没有测试过这个,但是你可以从中了解到这一切是如何协同工作的
String htmlFragment = "<div><button id='action1' type='button>Action 1<button/><div/>";
HTMLPanel container = new HTMLPanel(htmlFragment);
RootLayoutPanel.get().add(container);
Element button1El = container.getElementById("action1");
if(button1El != null){
Button button1 = Button.wrap(button1El);
button1.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
// What you want button 1 to do
}
});
}
String htmlFragment=“这里有一点代码想法,可以满足您的需求。我还没有测试过这一点,但您可以从中了解到如何将所有代码协同工作
String htmlFragment = "<div><button id='action1' type='button>Action 1<button/><div/>";
HTMLPanel container = new HTMLPanel(htmlFragment);
RootLayoutPanel.get().add(container);
Element button1El = container.getElementById("action1");
if(button1El != null){
Button button1 = Button.wrap(button1El);
button1.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
// What you want button 1 to do
}
});
}
String htmlFragment=“与其使用xul,不如将存储在数据库中的代码编写为html片段。这样你就不需要翻译了。然后,您可以将html片段注入DOM,然后查询DOM以查找要连接到已编写的处理程序的任何元素。当然,使用GWT来实现这一点,您需要在之前编写所有处理程序(您可以动态创建具有新功能的新按钮)在上面的注释中键入,您可以“不要在运行中创建新功能。换句话说,您不能动态添加GWT编译的代码。但是,如果需要的话,您可以动态地注入新的javascript处理程序。谢谢@Deanna(+2),是的,事后看来,XUL没有任何优势,我可以直接存储HTML代码片段。但我仍然在学习GWT的诀窍,并且很难想象您在这里提出的解决方案。有没有可能添加一个带有代码示例的答案,甚至只是伪代码?可能会让一些灯泡熄灭。再次感谢迄今为止所有的帮助!代替xul,为什么不将存储在数据库中的代码编写为html片段呢。这样你就不需要翻译了。然后,您可以将html片段注入DOM,然后查询DOM以查找要连接到已编写的处理程序的任何元素。当然,使用GWT来实现这一点,您需要在之前编写所有处理程序(您可以动态创建具有新功能的新按钮)在上面的注释中键入,您可以“不要在运行中创建新功能。换句话说,您不能动态添加GWT编译的代码。但是,如果需要的话,您可以动态地注入新的javascript处理程序。谢谢@Deanna(+2),是的,事后看来,XUL没有任何优势,我可以直接存储HTML代码片段。但我仍然在学习GWT的诀窍,并且很难想象您在这里提出的解决方案。有没有可能添加一个带有代码示例的答案,甚至只是伪代码?可能会让一些灯泡熄灭。再次感谢迄今为止所有的帮助!谢谢@Deanna(+1)-我开始看到它合二为一,但仍然有一个问题。在您的简单/概念性示例中,htmlFragment
是一个字符串。实际上,我需要从数据库中读取它,并在客户端将其下拉。这样,某一天,htmlFragment
可能是一个包含
的
,而另一天,它可能包含整个
或其他小部件的面板。这是我困惑的根源:我如何(从客户端)从服务器端下拉小部件(以XML/HTML/XUL/等形式存储在数据库中),并将它们呈现给最终用户?再次感谢!要访问数据库,需要使用requestFactory。您需要服务器端代码。我不知道您正在使用哪个数据库,所以假设您只编写了一个ret的服务