不要进行浏览器重定向。使用 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,则表明当您打开一个新 URL 时,您正在创建一个新桌面。ZK 实际上将 body onunload javascript 处理程序放在它呈现的 html 页面上,告诉浏览器在用户导航到新 url 时发送最终 AJAX 事件以销毁现有桌面。因此,当您让用户离开您的第一个 zul 页面时,您实际上会破坏您的 ViewModel。这就是为什么您在浏览器转到的新网址上看不到任何数据的原因;这是一个全新的桌面,它将获得一个全新的 ViewModel,与用户离开的那个无关。