javascript-更新对话框而没有立即关闭它?
作者:互联网
我目前正在尝试通过Javascript打开对话框,并在显示对话框本身之前更新其元素.
触发器来自primefaces推送,因此我尝试通过JavaScript处理所有事件.
基本上流程是这样的:
<p:socket onMessage="onStart" channel="/votingStartChannel" />
套接字触发以下JavaScript:
function onStart(data)
{
votingDialogRefresh();
PF('votingDialogWindow').show();
}
请注意,我的对话框称为votingDialogWindow.
另一个函数votingDialogRefresh();正在触发以下内容:
<h:form>
<p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" />
</h:form>
在对话框显示之前“应该”更新对话框.
但是,一旦我开始该流程,该对话框就会立即打开和关闭.我看到它像3秒钟.而且,据我所见,在这个很小的时间范围内,没有任何更新,因为所有字段仍未填充期望值.
我在这里做错了什么?
解决方法:
您的技术问题是由于< p:remoteCommand>执行“即发即弃”异步(ajax)请求.基本上,在发送了ajax请求之后,votingDialogRefresh()函数调用将立即返回并前进至PF(‘votingDialogWindow’).show(),该对话框将显示对话框.但是,当< p:remoteCommand>的ajax响应出现时,稍后返回,它将更新整个对话框.显然,对话框的默认状态为“关闭”.因此它将在视觉上立即关闭.默认状态可以通过visible属性控制.如果您使用了visible =“#{facesContext.postback}”,它将显示为已打开,这对于用户体验来说很糟糕,因为最终用户会在对话框打开后不久看到对话框的内容被更新/更改,这很令人困惑.
您应该在ajax请求完成且对话框更新后打开对话框,而不是在触发ajax请求之前或更新对话框之前.您只需将调用移至< p:remoteCommand>的oncomplete即可实现.
function onStart(data) {
votingDialogRefresh();
}
<h:form>
<p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow"
oncomplete="PF('votingDialogWindow').show()" />
</h:form>
标签:jsf,primefaces,javascript 来源: https://codeday.me/bug/20191027/1942062.html