首页 > 解决方案 > 我可以在 zk 的 hbox 中使用包含吗?

问题描述

我的 zul 中有以下代码:

<hbox>
   <include src="firstInclude.zul" />
   <include src="secondInclude.zul" />
</hbox>

我不断收到 firstInclude.zul 的 page-not-found 错误。firstInclude.zul 文件与包含上述代码的文件位于同一目录中。另一方面,包含上述代码的 zul 文件被动态包含在模式窗口中。窗口的视图模型正在执行此任务。我究竟做错了什么?

标签: javazk

解决方案


相对包含路径根据当前桌面的路径(即main.zul当前显示的位置)进行解析。

如果您想在代码中检查这一点,请在AbstractExecution:toAbsolutePath()中放置一个断点,并观察哪些uri被传入,哪些currentDirectory被前置。

(此过程独立于任何组件,因此<hbox>与它无关。这也与动态使用无关。)

假设这个静态结构:

/pages/main.zul
/pages/sub/sub.zul
/pages/sub/sub-include.zul

主.zul

<div>
    <include src="sub/sub.zul"/>
</div>

子/子.zul

<div>
    SUB
    <div>
        <include src="sub-include.zul"/>
    </div>
</div>

会导致这个错误:

org.zkoss.zk.ui.UiException: Page not found: /pages/sub-include.zul
    at org.zkoss.zk.ui.http.ExecutionImpl.getPageDefinition(ExecutionImpl.java:385)
    at org.zkoss.zul.Include.afterCompose(Include.java:509)
    ...

如下更改包含的 src url 将解决此问题。

<include src="sub/sub-include.zul"/>

我同意这并不明显,但这就是它的行为方式。

更强大的替代方法是使用绝对路径(以 a 开头/)来避免相对路径解析问题。

<include src="/pages/sub/sub-include.zul"/>

推荐阅读