包含Zk.zul页面与主控制器不兼容



我使用选项卡框创建选项卡页面。每个选项卡都包含另一个zul页面。我有一个控制器应用于主页。

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

这是我的密码。

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

这是我的控制器(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;
    }
}
  1. 从包含的页面(DealerEdit.zul(中删除<window title="Dealer Edit" >,因为它形成了自己的IdSpace。不要忘记删除关闭的</window>标记
  2. 更改onASD方法名称以包含Include组件id,即onASD$DealerEditContent。Include似乎也形成了自己的IdSpace,转发事件在IdSpace中不起作用

这应该行得通。

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

更新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

最新更新