Dan*_*lor 1 wizard primefaces jsf-2
我p:wizard在p:dialog组件内部有PrimeFaces 。我将自定义按钮用于下一步/上一步:
<p:commandButton value="Weiter" onclick="wiz.next()">
Run Code Online (Sandbox Code Playgroud)
我想更改包含向导的对话框的元素,在我的情况下是对话框标题:
<p:dialog id="dialogRespWizard"
header="#{wizardBean.header}"
Run Code Online (Sandbox Code Playgroud)
我已将代码更改为:
<p:commandButton value="Weiter" onclick="wiz.next()" update="dialogRespWizard">
Run Code Online (Sandbox Code Playgroud)
但是选择下一步后,整个对话框消失了。
因此,如何在步骤更改时刷新向导的“周围环境”?
关于您的问题:
该对话框消失是因为您更新了整个对话框(这意味着整个对话框元素将从HTML页面中删除,并将被从服务器收到的新对话框HTML元素替换),这是有意的。如果要更新对话框内部的内容,则需要在对话框内部制作某种XXXpanel并更新XXXpanel(包装HTML对话框元素将保持不变,只是对话框的内容将替换为从服务器接收到的新内容。 ):
<p:dialog id="dialogWizard" header="something">
<p:outputPanel id="outputPanelWizard">
// a lot of stuff which needs to get updated
</p:outputPanel>
<p:commandButton .... update="outputPanelWizard" />
</p:dialog>
Run Code Online (Sandbox Code Playgroud)
...,并且您的对话框不会再次隐藏。因此,您需要将页眉放入已经完成的构面中,朝正确方向迈出一步。
对于您的自我解答:
之所以出现“闪烁”,是因为您使用了onclick和update。用户单击p:commandButton时,将立即执行Onclick。但是更新有时会在该周期的晚些时候发生(当浏览器从服务器收到响应时)。因此,向导将使用wiz.next()进行切换,然后更新将在对话框标题上进行。您可以只使用oncomplete而不是onclick,切换将在浏览器收到服务器的响应并且对话框更新后 ->不再“闪烁”。也存在其他一些解决方案,例如
不要使用在p的onclick /的onComplete /更新:的commandButton,而不是在处理一切动作 / * * ActionListener的使用RequestContext的是在这里看到的RequestContext展示。
this.header = "my new header";
context.execute("wiz.next();");
context.update("outputPanelWizard");
Run Code Online (Sandbox Code Playgroud)
优点是恕我直言,您可以评估表单(用户输入)并切换到wiz.next()(如果适用)。当用户输入不满意时,您可以停留在同一页面上,只需不调用wiz.next()即可。标头同样如此,您可以相对于用户输入在后台bean中进行更新。
| 归档时间: |
|
| 查看次数: |
9180 次 |
| 最近记录: |