加载数据并使用相同的操作进行导航

时间:2012-06-10 21:08:49

标签: zk zul

我是zk6框架的新手。我创建了一个视图模型类,我试图从一个zul导航并在另一个中加载一些数据:

public class SearchVM {
@Command
@NotifyChange({ "searchBean","slides" })
public void doSearch() {
        //load data (slides) from data base
        //navigate to another zul where i display my data
    }

}

如果我保持相同的zul,则显示数据,但如果我导航到另一个,我什么也得不到。 我试图使用Executions.sendRedirect("/result.zul")没有成功。

1 个答案:

答案 0 :(得分:1)

不要进行浏览器重定向。使用AJAX显示结果。

因此,在下文中,单个zul文件有两个区域,默认情况下一次隐藏。单击该按钮时,它会隐藏第一个区域并显示第二个区域。

<zk>
<zscript>
boolean showFirstZone = true; 
</zscript>
<window visible="${showFirstZone}" id="firstZoneWindow">
    This is first zone. 

    <include src="/WEB-INF/search/search-input.zul"/>

    <button label="Switch To Results" onClick="secondZoneWindow.visible=true;firstZoneWindow.visible=false;" />

</window>

<window visible="${!showFirstZone}" id="secondZoneWindow" >
   This is second zone. 

   <include src="/WEB-INF/search/search-result.zul"/>

</window>
</zk>

请注意,我将包含的zul文件放在/ WEB-INF下,以便无法从浏览器访问它们,这是一个好主意。这样,只有定义系统桌面的入口页面位于站点的主文件夹中(例如,一个用于客户,一个用于员工,一个用于管理员),每个入口页面都可以重用隐藏在/ WEB-INF下的包含片段。

理论:

使用php / jsp,您可以让浏览器请求新页面并绘制它们,以便他们通过会话查看相关日期。 ZK是一个面向桌面的框架,您倾向于构建“单页面应用程序”,这意味着应用程序由AJAX更新。执行浏览器重定向不会进行AJAX更新。您强制重新获取所有JS和CSS并重新评估zul文件,这比通过AJAX进行动态更新效率低得多。

如果您阅读http://books.zkoss.org/wiki/ZK%20Developer%27s%20Reference/UI%20Composing/Component-based%20UI,则表示当您打开新网址时,您正在创建新桌面。 ZK实际上将一个onunload javascript处理程序放入html页面,它呈现告诉浏览器发送最终的AJAX事件以在用户导航到新URL时销毁现有桌面。因此,当您的用户离开第一个zul页面时,您实际上会破坏ViewModel。这就是为什么你没有在浏览器进入的新网址上看到任何数据的原因;它是一个全新的桌面,它将获得一个全新的ViewModel,它与用户离开的那个没有任何关系。