4

在我们的项目中,我们ZK用于网页。有一个combobox列表。选择后,它通过 获取来自 java 对象的数据onSelect,我已经给出了逻辑。当我选择一个时,该页面上有 4 个listboxes要根据选择填充数据。当我第一次选择时,没有问题发生。

但是在第二次我收到一个错误弹出窗口,例如“在窗口的 id 空间中不是唯一的”,并显示必须在选择时填写的列表框项 id。

有人可以帮忙吗?

注意:虽然它显示此错误,但我listboxes根据组合框选择正确填写。我仍然无法阻止此错误的发生..

4

2 回答 2

1

您的问题是 ZK 中的 id 冲突id space

有点背景。。

ZK 在运行时为组件生成 id,如果你在浏览器中打开 DOM,你会看到每个组件都有一些机器可读的 id。

但是,您也可以给组件一个 id。此 id 不会转到 DOM,但可以让您在应用程序中引用该组件。

这两个不应该混淆。您遇到的冲突是后一种类型的 id;您在 Java 代码或 ZUL 文件中为组件分配了一个 ID,该 ID 在运行时不是唯一的。

您描述的仅在您第二次单击时才发生的情况是这里的一个故事标志。您在事件中添加的内容中定义了一个 id,完成后您不会删除此内容。

考虑以下示例:

@Wire
private Window myWindow;

@Listen(Events.ON_CLICK + " = #myButton")
public void onMyButtonClicked() {
    Label myLabel = new Label("sean is cool");
    myLabel.setId("myLabel");
    myLabel.setParent(myWindow);
}

这将在您第一次单击时起作用myButton,但会在第二次单击时引发错误。那是因为第二个事件试图添加myLabelmyWindow但那里已经有一个myLabel

有很多方法可以解决这个问题,具体取决于您要执行的操作。查看关于ID 空间
的 ZK 文档了解更多信息。

于 2013-05-11T10:55:40.490 回答
0

我也面临同样的错误。我的场景是一样的,只是使用的小部件不同。因此将我的解决方法放在这里。

doBeforeCompose()我在作曲家的方法中放入了以下代码:

Component widgetWithId = page.getFellowIfAny("widgetWithId");
if (widgetWithId != null) {
    widgetWithId.detach();
}

widgetWithId是组件/小部件,它试图由代码重新生成,具有相同的 Id 并且 ZK 为其抛出错误。

于 2020-04-16T08:45:27.827 回答