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

标签 include annotations zk

我使用 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/

    相关文章:

    c - 为什么要定义函数而不是包含文件

    java - Java中的注解处理是什么?

    java - 在 CVS 中维护 Eclipse 项目 include/lib 路径

    c - 如何根据用户输入每次#include 不同的文件?

    java - 在 BeanPostProcessor 实现中获取 bean 的注解

    java - 如何在 ZUL 文件中使用 HTML 标签

    html - 如何使用 Bootstrap 水平对齐组件?

    javascript - 列表出现后是否可以从 ZK 组合框中移除焦点?

    c++ - 错误 "C1083 cannot open include file gecode/int.hh"尽管路径设置正确

    java - 与基于 xml 的配置相比,注释在重新编译、重新部署方面不是有显着的优势吗?