gpt4 book ai didi

include - Zk 如何通过 id 访问包含的 .zul 页面组件?

转载 作者:行者123 更新时间:2023-12-01 09:36:35 30 4
gpt4 key购买 nike

我无法通过包含的 .zul 页面中的 id 访问组件。我有一个带有 Controller 的 main.zul,我需要通过 java Controller 类在包含的 zul 页面中获取一个组件,但它返回 null。

我知道包含的方法会创建新的 id 空间,但是有什么方法可以获取这个组件吗?

更新

这是我的代码:

zul 主页

<?page title="DealerVizard.zul"?>

<?page id="main" ?>

<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="./Dealer" ?>
<zk>
<style src="/resources/css/default.css" />
<window id="Dealer" class="index"
apply="com.i2i.prm.controller.IndexController">


<div class="content" width="100%">

<tabbox id="tb" forward="onSelect=onSelect">
<tabs id="tabs">
<tab id="info" label="INFO" />
<tab id="create" label="CREATE" />
<tab id="edit" label="EDIT" />
<tab id="test" label="TEST PANEL(LIST BOX)" />

</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>

<tabpanel id="PagingListBox">
<include id="PagingListBoxContent" // Included here
src="View/TEST/PagingListBox.zul" />
</tabpanel>
</tabpanels>
</tabbox>
</div>
</window>

</zk>

PagingListBox.zul(包含页面)

<?page id="list" ?>

<zk>

<grid width="100%">

<columns>
<column label="" />

</columns>
<rows>
<row>
<listbox id="listModel" width="100%" height="100%"
visible="true" span="true" pagingPosition="top" rows="20"
selectedItem="@{DealerController.selected}"
model="@{DealerController.userList}"
forward="onSelect=//main/Dealer.onSelect">
<auxhead>
<auxheader colspan="1">
<textbox
value="@{DealerController.searchUser.name}" maxlength="9"
id="searchCO_ID" forward="onChanging=//main/Dealer.onSearch"
width="100%">
</textbox>
</auxheader>
<auxheader colspan="1">
<textbox
value="@{DealerController.searchUser.surname}" maxlength="21"
id="searchMSISDN" forward="onChanging=//main/Dealer.onSearch"
width="100%">
</textbox>
</auxheader>
<auxheader colspan="1">

</auxheader>

</auxhead>

<listhead>
<listheader label="Name"
sort="auto(UPPER(name))" />

<listheader label="Surname"
sort="auto(UPPER(surname))" />


<listheader label="Delete ?" />
</listhead>


<listitem self="@{each=USERLIST}">

<listcell>
<label value="@{USERLIST.user.name}" />
<textbox
value="@{DealerController.tmpUser.name}" visible="false" />
</listcell>
<listcell>
<label value="@{USERLIST.user.surname}" />
<textbox
value="@{DealerController.tmpUser.surname}" visible="false" />
</listcell>

<listcell>
<button label="Update"
forward="onClick=//main/Dealer.onUpdate" visible="false" />
<button image="icons/edit-delete.png"
label="Delete" forward="onClick=//main/Dealer.onDelete"
width="100%" disabled="true" />
<button label="Save"
forward="onClick=//main/Dealer.onSave" visible="false" />
<button label="Cancel"
forward="onClick=//main/Dealer.onCancel" visible="false" />
</listcell>
</listitem>
</listbox>
<paging id="pagingData" pageSize="20" />
</row>

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

IndexCONtroller.java

public class IndexController extends  GenericForwardComposer  {

private List<User> userList = new ArrayList<User>() ;
AnnotateDataBinder binder;
Tabbox tb;
Window Dealer;
private int pageCount=0;

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


System.out.println(Path.getComponent("//list/listModel"));
}


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

最佳答案

通常我不建议使用 Path.getComponent() 方式来访问其他组件,因为您的应用程序代码与 View 页面中的组件结构紧密耦合。在您的情况下,您最简单的方法是使用 AbstractComponent#getFellow(String compId)方法,例如。

Include inc = (Include) Dealer.getFellow("PagingListBoxContent");
Listbox listModel = (Listbox) inc.getFellow("listModel");
System.out.println(listModel);

因此,将来即使您在 ZUML 页面中在列表框之前插入任何其他组件,您的代码仍然可以工作。

更新:顺便说一句,有一个有趣的 blogpost最近在 ZK 博客上讨论这个话题

关于include - Zk 如何通过 id 访问包含的 .zul 页面组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661675/

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