Invalidate() 方法不会刷新 MVC ZK 中的 Web 元素
Invalidate() method wont refresh web element in MVC ZK
我有关于刷新 zul 页面中某些元素的问题。我目前使用带 ZK 的 MVC 而不是 MVVM。我已经使用了 elementId.invalidate(),但似乎该方法不起作用。有人可以帮助我如何在 MVC ZK 中做到这一点吗?
这是我的 zul 页面
<?xml version="1.0" encoding="UTF-8"?>
<zk xmlns="http://www.zkoss.org/2005/zul">
<window border="none" apply="com.dorne.got.ui.far.there.FooComposer">
<groupbox mold="3d" closable="false">
<caption
label="${labels.generate.foo.forward}" />
<grid fixedLayout="true">
<columns>
<column width="20%" />
<column width="80%" />
</columns>
<rows>
...
...
<row>
<div>
<label
value="${labels.foo.fr.Name}" />
</div>
<div>
<!-- constraint="/.+\.+|/: Please enter a valid Name" -->
<textbox id="txtName" width="10%" />
<label id="lblErrorName"
style="color:red" />
</div>
</row>
</rows>
</grid>
<div align="center">
<separator />
<button id="btnSubmit"
label="${labels.common.button.generate}" />
<button id="btnClose"
label="${labels.common.button.cancel}" />
<separator />
</div>
</groupbox>
</window>
这是我的 MVC zk 作曲家
public class RefreshLabelNameComposer extends WindowComposer {
@Wire
private Label lblErrorName
@Override
public void doAfterCompose(Window comp) throws Exception {
//skip this code
}
public longProcess() {
//some long proccess
}
@Listen("onClick = #btnSubmit")
public void btnSubmitClick() {
lblErrorName.setValue("");
lblErrorName.invalidate();
longProccess();
}
}
假设经过一些过程后,lblErrorName 值不为空。
在我按下提交按钮后,就在不久的过程 运行 之前,lblErrorName 不会将其值刷新为“”。我想在长过程 运行 之前,将 lblErrorName 刷新为空字符串,这样用户在 运行 longProccess 方法时不会看到错误。我认为问题在于 invalidate() 方法如何与 MVC ZK 一起工作,但我不确定是什么问题。
有人可以帮忙解决吗?非常感谢
编辑:我使用的是 ZK 7
编辑 2:我已经试过了
lblErrorName.setVisible(!lblErroName.isVisible());
lblErrorName.setValue("");
lblErrorName.setVisible(!lblErroName.isVisible());
但是,元素标签 lblErrorName 仍然不会刷新为空字符串
你掉进了大多数人都有问题的陷阱。
这与 MVC 或 MVVM 无关,甚至 invalidate()
也永远不会在您想要的时候工作。
原因是只要你的方法是运行(长操作)你不给客户反馈。
换句话说,当你的长操作完成时发送反馈。
有几种方法可以实现这一点,但是 I prefer a great abstract solution created by Robert Wenzel of potix.
实现是相同的,只有 @Command
中的内容会出现在您的 @Listen
.
中
否则,如果您不想这样做,I suggest you just echo an event。
echo事件就是,你去client,client收到response后直接触发那个事件
这是一个很好的解决方案,当您没有太多长时间的操作时,但很难看到接下来会发生什么。
我有关于刷新 zul 页面中某些元素的问题。我目前使用带 ZK 的 MVC 而不是 MVVM。我已经使用了 elementId.invalidate(),但似乎该方法不起作用。有人可以帮助我如何在 MVC ZK 中做到这一点吗?
这是我的 zul 页面
<?xml version="1.0" encoding="UTF-8"?>
<zk xmlns="http://www.zkoss.org/2005/zul">
<window border="none" apply="com.dorne.got.ui.far.there.FooComposer">
<groupbox mold="3d" closable="false">
<caption
label="${labels.generate.foo.forward}" />
<grid fixedLayout="true">
<columns>
<column width="20%" />
<column width="80%" />
</columns>
<rows>
...
...
<row>
<div>
<label
value="${labels.foo.fr.Name}" />
</div>
<div>
<!-- constraint="/.+\.+|/: Please enter a valid Name" -->
<textbox id="txtName" width="10%" />
<label id="lblErrorName"
style="color:red" />
</div>
</row>
</rows>
</grid>
<div align="center">
<separator />
<button id="btnSubmit"
label="${labels.common.button.generate}" />
<button id="btnClose"
label="${labels.common.button.cancel}" />
<separator />
</div>
</groupbox>
</window>
这是我的 MVC zk 作曲家
public class RefreshLabelNameComposer extends WindowComposer {
@Wire
private Label lblErrorName
@Override
public void doAfterCompose(Window comp) throws Exception {
//skip this code
}
public longProcess() {
//some long proccess
}
@Listen("onClick = #btnSubmit")
public void btnSubmitClick() {
lblErrorName.setValue("");
lblErrorName.invalidate();
longProccess();
}
}
假设经过一些过程后,lblErrorName 值不为空。 在我按下提交按钮后,就在不久的过程 运行 之前,lblErrorName 不会将其值刷新为“”。我想在长过程 运行 之前,将 lblErrorName 刷新为空字符串,这样用户在 运行 longProccess 方法时不会看到错误。我认为问题在于 invalidate() 方法如何与 MVC ZK 一起工作,但我不确定是什么问题。 有人可以帮忙解决吗?非常感谢
编辑:我使用的是 ZK 7
编辑 2:我已经试过了
lblErrorName.setVisible(!lblErroName.isVisible());
lblErrorName.setValue("");
lblErrorName.setVisible(!lblErroName.isVisible());
但是,元素标签 lblErrorName 仍然不会刷新为空字符串
你掉进了大多数人都有问题的陷阱。
这与 MVC 或 MVVM 无关,甚至 invalidate()
也永远不会在您想要的时候工作。
原因是只要你的方法是运行(长操作)你不给客户反馈。
换句话说,当你的长操作完成时发送反馈。
有几种方法可以实现这一点,但是 I prefer a great abstract solution created by Robert Wenzel of potix.
实现是相同的,只有 @Command
中的内容会出现在您的 @Listen
.
否则,如果您不想这样做,I suggest you just echo an event。
echo事件就是,你去client,client收到response后直接触发那个事件
这是一个很好的解决方案,当您没有太多长时间的操作时,但很难看到接下来会发生什么。