Java Invalidate()方法不会刷新MVC ZK中的web元素
我有一个关于刷新zul页面中某些元素的问题。Im目前正在使用MVC和ZK,而不是MVVM。我已经使用了elementId.invalidate(),但该方法似乎不起作用。有人能帮我在MVC ZK中怎么做吗 这是我的zul页面Java Invalidate()方法不会刷新MVC ZK中的web元素,java,zk,Java,Zk,我有一个关于刷新zul页面中某些元素的问题。Im目前正在使用MVC和ZK,而不是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.g
<?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>
让我们假设经过一些处理后,lblErrorName值不是空的。
在我按下Submit按钮之后,就在长进程运行之前,lblErrorName不会将其值刷新为“”。我希望在longprocess运行之前,lblErrorName被刷新为空字符串,这样用户就不会在运行longprocess方法时看到错误。我认为问题在于invalidate()方法如何与MVC ZK一起工作,但我不确定问题出在哪里。
有人能帮我修一下吗?非常感谢
编辑:我正在使用ZK7
编辑2:我已经试过了
lblErrorName.setVisible(!lblErroName.isVisible());
lblErrorName.setValue("");
lblErrorName.setVisible(!lblErroName.isVisible());
但是,元素标签lblErrorName仍然不会刷新为空字符串您陷入了一个大多数人都有问题的陷阱。
这与MVC或MVVM无关,即使是
invalidate()
也无法在您想要的时间工作。原因是,只要您的方法正在运行(长时间操作),您就不会向客户端提供反馈。
换句话说,当您的长期操作完成时,将发送反馈。
有几种方法可以实现这一点,但是
实现是相同的,只有
@命令中的内容将出现在@Listen
中
否则,如果您不想这样做,。
Echo事件意味着,您转到客户端,客户端将在收到响应后直接触发该事件。
这是一个很好的解决方案,当您没有太长的操作时,但是很难看到接下来会发生什么。+1用于链接。首先,这是对如何在zk中简化长流程的极好补充。第二,虽然它没有直接回答我的问题,但是文章中提到了echoEvent方法,我使用了它。它可以强制调用任何事件,因为调用事件后,页面会自动刷新。谢谢,顺便说一句
lblErrorName.setVisible(!lblErroName.isVisible());
lblErrorName.setValue("");
lblErrorName.setVisible(!lblErroName.isVisible());