Java 将数据从一个编写器发送到另一个编写器

Java 将数据从一个编写器发送到另一个编写器,java,zk,zul,Java,Zk,Zul,我有两个zul和应用程序:index.zul和popup.zul index.zul显示一个按钮,单击该按钮可打开一个窗口。在该窗口中,popup.zul显示一个文本框,用户可以在其中键入值。用户单击确认按钮后,窗口关闭 如何将输入的值返回到index.zul以在那里显示 IndexComposer.java public class IndexComposer extends SelectorComposer<Component> { private static final

我有两个zul和应用程序:
index.zul
popup.zul

index.zul
显示一个按钮,单击该按钮可打开一个窗口。在该窗口中,
popup.zul
显示一个文本框,用户可以在其中键入值。用户单击确认按钮后,窗口关闭

如何将输入的值返回到
index.zul
以在那里显示

IndexComposer.java

public class IndexComposer extends SelectorComposer<Component> {
   private static final long serialVersionUID = 1L;

   @Wire
   private Window popupWindow;

   @Listen("onClick = #btn")
   public void button() {
       Window win = (Window) Executions.createComponents("popup.zul", 
                                                         getSelf().getParent(),
                                                         null);
       win.doModal();
   }
}
public class PopupComposer extends SelectorComposer<Component> {
    private static final long serialVersionUID = 1L;

    @Wire
    private Window popupWindow;

    @Wire
    private Textbox txt;

    @Listen("onClick = #close")
    public void closePopup() {
        System.out.println(txt.getValue());
        popupWindow.detach();
    }
}
公共类索引编译器扩展选择器编译器{
私有静态最终长serialVersionUID=1L;
@电线
私人窗口弹出窗口;
@听(“onClick=#btn”)
公共作废按钮(){
Window win=(Window)Executions.createComponents(“popup.zul”,
getSelf().getParent(),
无效);
win.doModal();
}
}
index.zul

<zk>
   <div apply="co.id.test.master.test.IndexComposer">
      <label id="lbl" />
      <button id="btn" label="Open popup" />
   </div>
</zk>
<zk xmlns:h="http://www.w3.org/1999/xhtml">
   <window id="popupWindow" title="Coffee Order" border="normal" mode="modal">
       <div apply="co.id.test.master.test.PopupComposer">
           <textbox id="txt" />
           <button id="close" label="close" />
       </div>
   </window>
</zk>

PopupComposer.java

public class IndexComposer extends SelectorComposer<Component> {
   private static final long serialVersionUID = 1L;

   @Wire
   private Window popupWindow;

   @Listen("onClick = #btn")
   public void button() {
       Window win = (Window) Executions.createComponents("popup.zul", 
                                                         getSelf().getParent(),
                                                         null);
       win.doModal();
   }
}
public class PopupComposer extends SelectorComposer<Component> {
    private static final long serialVersionUID = 1L;

    @Wire
    private Window popupWindow;

    @Wire
    private Textbox txt;

    @Listen("onClick = #close")
    public void closePopup() {
        System.out.println(txt.getValue());
        popupWindow.detach();
    }
}
公共类PopupComposer扩展了SelectorComposer{
私有静态最终长serialVersionUID=1L;
@电线
私人窗口弹出窗口;
@电线
私有文本框;
@听(“onClick=#close”)
公共无效关闭弹出窗口(){
System.out.println(txt.getValue());
popupWindow.detach();
}
}
popup.zul

<zk>
   <div apply="co.id.test.master.test.IndexComposer">
      <label id="lbl" />
      <button id="btn" label="Open popup" />
   </div>
</zk>
<zk xmlns:h="http://www.w3.org/1999/xhtml">
   <window id="popupWindow" title="Coffee Order" border="normal" mode="modal">
       <div apply="co.id.test.master.test.PopupComposer">
           <textbox id="txt" />
           <button id="close" label="close" />
       </div>
   </window>
</zk>

一种方法是使用
EventQueues
。它们是一种跨应用程序的不同部分发送事件的方法,而不需要发送方和接收方必须知道的目标组件(如“普通”
events.sendEvent()

下面是一个简单的示例,让您开始学习。请注意,我并没有对此进行测试,我使用了
应用程序
范围,这是一种核选项。例如,
DESKTOP
就足够了

公共类索引编译器
扩展选择器计算器
{
公共索引composer()
{
EventQueues.lookup(“MyEventQueueName”,EventQueues.APPLICATION,true)
.订阅(e->{
字符串数据=(字符串)e.getData();
//更新您的UI元素
});
}
@听(“onClick=#btn”)
公共作废按钮()
{
Window win=(Window)Executions.createComponents(“popup.zul”,getSelf().getParent(),null);
win.doModal();
}
}
公共类PopupComposer
扩展选择器计算器
{
@电线
私人窗口弹出窗口;
@电线
私有文本框;
@听(“onClick=#close”)
公共无效关闭弹出窗口()
{
popupWindow.detach();
EventQueues.lookup(“MyEventQueueName”,EventQueues.APPLICATION,true)
.publish(新事件(“,null,txt.getValue());
}
}

是的,在zk中获取文档
关于活动收听

非常感谢先生回答并编辑我的问题。对不起,我的语法很糟糕,先生,你有关于zk的电子书吗?很高兴听到它有帮助。你可以找人帮忙。他们的在线文档通常非常全面。事件侦听器是解决此问题的另一种可能。不过,您可能需要对此进行详细说明。在目前的情况下,答案是没有帮助的。您可以添加一个小示例或至少一个简短的方法说明,以及文档链接。