gpt4 book ai didi

include - Zk 包含的 .zul 页面不适用于主 Controller

转载 作者:行者123 更新时间:2023-12-03 18:42:47 26 4
gpt4 key购买 nike

我使用 tabbox 创建标签页。每个选项卡都包含另一个 zul 页面。我有 1 个 Controller 应用于主页。

如果我在包含的 zul 页面上向组件添加一些操作,则在 Controller 类上我无法捕捉到它。如果我将 Controller 应用于我的 zul,那么它会创建 Controller 类的新实例。

这是我的代码。

<zk>
<style src="/resources/css/default.css" />
<window id="Dealer" class="index"
apply="com.i2i.prm.controller.IndexController" width="100%"
height="100%">


<div class="content" >

<tabbox id="tb" width="100%" forward="onSelect=onSelect">
<tabs id="tabs">
<tab id="info" label="INFO" />
<tab id="create" label="CREATE" />
<tab id="edit" label="EDIT" />

</tabs>
<tabpanels>
<tabpanel id="DealerInfo">
<include id="DealerInfoContent" src="View/Dealer/DealerInfo.zul" />
</tabpanel>
<tabpanel id="DealerCreate">
<include id="DealerCreateContent" src="View/Dealer/DealerCreate.zul" />
</tabpanel>
<tabpanel id="DealerEdit">
<include id="DealerEditContent" src="View/Dealer/DealerEdit.zul" />
</tabpanel>

</tabpanels>
</tabbox>
</div>
</window>

</zk>

dealerEdit.zul
<zk>
<window title="Dealer Edit" >
<grid width="100%" sizedByContent="true">
<columns>
<column label="" />

</columns>
<rows>
<row >
<label value="Name"></label>
<textbox
value="@{DealerController.user.name }">
</textbox>
</row>
<row>
<label value="Surname"></label>
<textbox
value="@{DealerController.user.surname }" forward="onChange=onASD">
</textbox>
</row>
<row>
<label value="Address"></label>
<textbox
value="@{DealerController.user.address }">
</textbox>
</row>

</rows>
</grid>
</window>
</zk>

这是我的 Controller ( IndexController.java )类:
public class IndexController extends GenericForwardComposer {

private User user = new User();;
AnnotateDataBinder binder;
Tabbox tb;

@Override
public void doAfterCompose(Component comp) throws Exception {
// TODO Auto-generated method stub
super.doAfterCompose(comp);
comp.setAttribute(comp.getId() + "Controller", this);
binder = new AnnotateDataBinder(comp);

user.setName("Abdul");
user.setSurname("Rezzak");
user.setAddress("Giderken sağda");



binder.loadAll();
}

public IndexController() {
// TODO Auto-generated constructor stub
}

public void onDFG(ForwardEvent event){
System.out.println(this.hashCode());
}

public void onASD(ForwardEvent event){
System.out.println(this.hashCode());
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}
}

最佳答案

  • 删除 <window title="Dealer Edit" >来自您包含的页面 (DealerEdit.zul),因为它形成了自己的 IdSpace。不要忘记删除结束</window>标签。
  • 更改您的onASD包含您的 Include 的方法名称组件 ID 即 onASD$DealerEditContent .似乎 Include 也形成了自己的 IdSpace,并且转发事件在 IdSpace
  • 中不起作用

    这应该有效。

    更新 1:我刚刚确认 Include是一个 IdSpace 所有者组件,因为它实现了 IdSpace 接口(interface),因此这是您情况下唯一的解决方法。

    更新 2:我发现了一种更简单的方法来处理跨不同 IdSpace 的转发事件,即使用 ZUML 文件中的组件路径来指定目标组件。例如,在您的情况下,您可以在 main.zul 页面中指定页面 ID
    <?page id="main" ?>

    在您包含的页面(例如 DealerEdit.zul 页面)中转发事件时
    <textbox forward="onChange=//main/Dealer.onASD" />

    其余代码将保持不变。

    引用: http://books.zkoss.org/wiki/ZK_Developer%27s_Reference/Event_Handling/Event_Forwarding#Using_component_Path

    关于include - Zk 包含的 .zul 页面不适用于主 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584538/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com