Combobox ZK窗口在ID空间中不唯一
在我们的项目中,我们对网页使用Combobox ZK窗口在ID空间中不唯一,combobox,listbox,zk,zul,Combobox,Listbox,Zk,Zul,在我们的项目中,我们对网页使用ZK。有一个包含列表的组合框。选中时,它通过选择从java对象获取数据,我已经给出了逻辑。 当我选择一个时,该页面上有4个列表框,将根据选择填充数据。当我选择第一次时,没有问题发生 但在第二次我得到一个错误弹出像“不唯一的id空间的窗口”,并显示列表框项目id必须填写在选择 有人能帮忙吗 注意:尽管显示了此错误,但我根据组合框选择正确填充了列表框。我仍然无法阻止这个错误的发生。您的问题是ZK的id空间中的id冲突 一点背景知识 ZK在运行时为组件生成id,如果您在浏
ZK
。有一个包含列表的组合框。选中时,它通过选择从java对象获取数据,我已经给出了逻辑。
当我选择一个时,该页面上有4个列表框
,将根据选择填充数据。当我选择第一次时,没有问题发生
但在第二次我得到一个错误弹出像“不唯一的id空间的窗口”,并显示列表框项目id必须填写在选择
有人能帮忙吗
注意:尽管显示了此错误,但我根据组合框选择正确填充了
列表框。我仍然无法阻止这个错误的发生。您的问题是ZK的id空间中的id冲突
一点背景知识
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);
}
这将在您第一次单击“我的按钮”时起作用,但在第二次单击时会抛出错误。这是因为第二个事件试图将myLabel
添加到myWindow
中,但那里已经有一个myLabel
有很多方法可以解决这个问题,具体取决于您要做什么。
查看上的ZK文档了解更多信息。我也遇到了同样的错误。
我的场景是相同的,只是使用的小部件不同。
因此我把我的工作放在这里
我已将以下代码放在编写器的doBeforeCompose()
方法中:
Component widgetWithId = page.getFellowIfAny("widgetWithId");
if (widgetWithId != null) {
widgetWithId.detach();
}
这里的widgetWithId
是试图由代码重新生成的组件/小部件,具有相同的Id,ZK为其抛出错误。您可以发布您的ZUL和可能的一些相关逻辑吗?如果您使用的是MVVM体系结构,那么不要在ZUL页面中使用Id属性