Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT:查询代理UI类并将其转换为小部件_Java_Gwt_Proxy_Uibinder - Fatal编程技术网

Java GWT:查询代理UI类并将其转换为小部件

Java GWT:查询代理UI类并将其转换为小部件,java,gwt,proxy,uibinder,Java,Gwt,Proxy,Uibinder,今天早上我问了一个问题,得到了一个非常好的答案。我现在正在尝试设计原型,遇到了一个类似(但不相同)的问题。从本质上讲,我试图拥有一个100%配置驱动的GWT UI,其中对DB的更改可以产生完全不同的UI,但不需要任何代码更改 我的架构很简单: 我将使用一个单独的工具(或者首先手动)生成一个.xul(xul)文件并将其保存到数据库中;可能是像Mongo或类似的文档数据库 在服务器端,我将编写一个XulParser,从数据库中读取XUL文件,并将其转换为ContainerProxy实例 Cont

今天早上我问了一个问题,得到了一个非常好的答案。我现在正在尝试设计原型,遇到了一个类似(但不相同)的问题。从本质上讲,我试图拥有一个100%配置驱动的GWT UI,其中对DB的更改可以产生完全不同的UI,但不需要任何代码更改

我的架构很简单:

  • 我将使用一个单独的工具(或者首先手动)生成一个.xul(xul)文件并将其保存到数据库中;可能是像Mongo或类似的文档数据库
  • 在服务器端,我将编写一个
    XulParser
    ,从数据库中读取XUL文件,并将其转换为
    ContainerProxy
    实例
    • ContainerProxy
      是我的“代理”,相当于
      com.google.gwt.user.client.ui.Panel
      或类似的东西;它只是一个bean/POJO,包含其他小部件代理的列表(请参阅下面的代码片段)
    • 例如,我可能有一个XUL文件,它定义了一个
      按钮
      ,如下所示
    • ButtonProxy
      将添加到
      ContainerProxy
      (以及同一容器/视图/面板中的任何其他UI小部件)
  • 在客户端,我将以某种方式查询
    ContainerProxy
    (?),并将其从服务器上拉下来
  • 然后,我将有一个机制,将
    ContainerProxy
    的每个子项(
    按钮proxy
    等)转换为实际的UI小部件
这样,首先我可以将某个XUL文件放入数据库,UI上可能只包含“Order Now”按钮。但是接下来,我可能想使用一个完全不同的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());

在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的服务