我正在尝试将一个对象从一个 zul 页面传递到另一个页面。在哪里 :
- 两个 zul 页面都有自己的作曲家。
- 我想在 1st zul 的作曲家中设置对象的值。
- 并希望在 2nd zul 的作曲家中得到它。
我试过 executions.sendredirect(),但它清除了对象的值,forward() 抛出一个异常,说“使用 sendRedirect 来处理用户请求”。
你的问题是范围。
在 ZK 中,与其他 Web 应用程序框架一样,您可以访问许多不同的范围:webapp、桌面、页面、会话、请求等。如果您从两个不同的 URL 提供两个不同的页面,那么它们将具有不同的请求范围。
从一个请求移动到另一个请求时,您可以在请求 URL 上传递信息:
Executions.sendRedirect("page2.zul?myId=1234")
然后,在 page2 上的作曲家中,您可以从以下位置检索此值Execution
:
Execution execution = Executions.getCurrent();
execution.getParameter("myId");
这是标准的HTTP 查询字符串业务,因此您在此处仅限于文本和数字。不过,对于传递数据库 id 之类的东西,这可能非常方便。
一个更强大的解决方案可能是利用 ZK 的一些其他作用域。例如,您可以将您的对象放在用户的Session
范围内。请参阅我对带有菜单的 ZK 会话变量的回答,了解实现细节。请注意,使用 时Session
,您不再局限于文本,而是可以存储实际的Object
.