我正在使用PrimeFaces 4.0。我有一个页面有三个对话框组件(对话框1,对话框2,对话框3)和三个按钮组件(按钮1,按钮2,按钮3),对话框1将通过单击按钮1显示,对话框2将通过单击显示按钮2和对话框3将通过单击按钮3显示。用户可以同时打开这三个对话框,这意味着用户可以使用这三个对话框进行一些工作,如下所示:
当用户在对话框中做一些工作时,我需要更改支持bean中的一些值并首先更新一些组件,当用户通过单击按钮显示对话框时,没有问题,我可以更改某些值用户单击触发的按钮的ActionListener,但是当用户显示三个对话框时,通过单击对话框更改活动对话框,如下所示:
如何将“对话框1”中的活动对话框更改为“对话框2”?
这是我的xhtml代码:
<p:commandLink onclick="dialog1.show()" update="outputText" actionListener="#{testBean.changeActiveDialog('Dialog 1')}">button 1</p:commandLink><br/>
<p:commandLink onclick="dialog2.show()" update="outputText" actionListener="#{testBean.changeActiveDialog('Dialog 2')}">button 2</p:commandLink><br/>
<p:commandLink onclick="dialog3.show()" update="outputText" actionListener="#{testBean.changeActiveDialog('Dialog 3')}">button 3</p:commandLink><br/>
<br/><hr/><h:outputText id="outputText" value="Active dialog: #{testBean.activeDialog}"/>
<p:dialog id="dialog1"
header="dialog 1"
resizable="true"
dynamic="false"
modal="false"
draggable="true"
widgetVar="dialog1"
minimizable="true"
maximizable="true">
dialog1
</p:dialog>
<p:dialog id="dialog2"
header="dialog 2"
resizable="true"
dynamic="false"
modal="false"
draggable="true"
widgetVar="dialog2"
minimizable="true"
maximizable="true">
dialog2
</p:dialog>
<p:dialog id="dialog3"
header="dialog 3"
resizable="true"
dynamic="false"
modal="false"
draggable="true"
widgetVar="dialog3"
minimizable="true"
maximizable="true">
dialog3
</p:dialog>
我的视图bean:
public class TestBean extends BaseBean {
private String activeDialog;
public void changeActiveDialog(String dialog)
{
activeDialog = dialog;
}
public String getActiveDialog() {
return activeDialog;
}
public void setActiveDialog(String activeDialog) {
this.activeDialog = activeDialog;
}
}
我用谷歌搜索了但我没有找到解决问题的方法。任何建议将不胜感激,谢谢。
答案 0 :(得分:1)
尽管在同一时间打开多个对话框并不是一个好主意,但您可以随时使用javascript来实现您想要的效果。
单击或拖动对话框时会更改z-index,使其“活动”/高于其他元素,在这种情况下,您可以设置两个主要事件来监听:click
和{{ 1}}然后通过dragstop
将该对话框ID发送到managedBean,这是一个例子:
<强> 的javascript 强>
remoteCommand
<强> XHTML 强>
$('.ui-dialog').on('click dragstop',function () {
activeDialog([{name: 'activeDialog', value: $(this).attr('id')}]);//remoteCommand
});
<强> managedBean 强>
<p:remoteCommand name="activeDialog" actionListener="#{mainBean.activeDialog}"/>
注意:您应该在第一次打开对话框时保持actionListener。
答案 1 :(得分:0)
我认为你不应该同时打开超过1个对话框 尝试更改您的设计(例如,创建1个大对话框而不是3个对话框。)