Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否在不立即关闭对话框的情况下更新对话框?_Javascript_Jsf_Primefaces - Fatal编程技术网

Javascript 是否在不立即关闭对话框的情况下更新对话框?

Javascript 是否在不立即关闭对话框的情况下更新对话框?,javascript,jsf,primefaces,Javascript,Jsf,Primefaces,我目前正试图通过Javascript打开一个对话框,并在显示对话框之前更新其元素 触发器来自primefaces push,所以我尝试通过JavaScript来处理它 基本上,流程是这样的: <p:socket onMessage="onStart" channel="/votingStartChannel" /> 请注意,我的对话框名为votingDialogWindow 另一个函数,votingDialogRefresh()正在触发以下事件: <h:form>

我目前正试图通过Javascript打开一个对话框,并在显示对话框之前更新其元素

触发器来自primefaces push,所以我尝试通过JavaScript来处理它

基本上,流程是这样的:

<p:socket onMessage="onStart" channel="/votingStartChannel" /> 
请注意,我的对话框名为
votingDialogWindow

另一个函数,
votingDialogRefresh()正在触发以下事件:

<h:form>
    <p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" />
</h:form>

在显示对话框之前,哪个“应该”更新对话框

但是,一旦启动流,对话框就会立即打开和关闭。我能像这样看3秒钟。而且,就我所见,在这个微小的时间跨度内,并没有任何更新,因为所有字段仍然并没有填充预期值


我做错了什么?

您的技术问题是因为
执行了一个“触发并忘记”异步(ajax)请求而引起的。基本上,在发送ajax请求之后,
votingDialogRefresh()
函数调用立即返回并前进到显示对话框的
PF('votingDialogWindow')。show()
。但是当
的ajax响应稍后返回时,它将更新整个对话框。显然,对话框的默认状态是“关闭”。因此,它将在视觉上立即关闭。默认状态是通过
visible
属性进行控制;如果您使用了
visible=“#{facesContext.postback}”
,它会显示为已打开,这对用户体验很差,因为最终用户会看到对话框的内容在打开后很快得到更新/更改,这令人困惑

您应该在ajax请求完成并更新对话框时打开对话框,而不是在触发ajax请求之前,也不是在更新对话框之前。您只需将调用移动到
oncomplete
即可实现这一点


<h:form>
    <p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" />
</h:form>
function onStart(data) {
    votingDialogRefresh();
}
<h:form>
    <p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" 
        oncomplete="PF('votingDialogWindow').show()" />
</h:form>