在primefaces中单击ESCAPE(ESC)时关闭所有对话框

时间:2012-10-26 06:49:13

标签: java jsf primefaces

我正在使用4-5个主要对话框。单击ESC时,我想关闭所有打开的对话框。

2 个答案:

答案 0 :(得分:4)

通过hide()指定的客户端对象调用对话框的widgetVar函数。因此,如果您将p:dialog定义为:

<p:dialog widgetVar="dialog1" header="Dialog 1"/>
<p:dialog widgetVar="dialog2" header="Dialog 2"/>

您的ESC按钮应如下所示:

<p:commandButton value="ESC" onclick="dialog1.hide();dialog2.hide()"/>

您还可以创建一个可重复使用的p:remoteCommand来关闭所有对话框,并在p:commandButtonp:hotkey中使用该对话框 - 如果通过“点击ESCAPE”,则表示使用Escape按钮:

<p:remoteCommand name="closeAll" onsuccess="dialog1.hide();dialog2.hide()"/>

然后在您的组件中引用closeAll()命令:

<p:hotkey bind="esc" handler="closeAll()"/>
<p:commandButton value="ESC" onclick="closeAll()"/>

答案 1 :(得分:4)

虽然帖子很旧,但答案是一个静态的解决方案,这里是一个使用jQuery的动态解决方案。

function escDialog() {
   $(document).keyup(function(e) {
       if (e.keyCode == 27) { // esc code is 27 
           closeAllDialog() ;
       }   
   });
}

function closeAllDialog() {
   for (var propertyName in PrimeFaces.widgets) {
     if (PrimeFaces.widgets[propertyName] instanceof PrimeFaces.widget.Dialog ||
         PrimeFaces.widgets[propertyName] instanceof PrimeFaces.widget.LightBox) {
         PrimeFaces.widgets[propertyName].hide();
     }
   }
}

然后在您的文档中。您可以致电escDialog()

希望这会有所帮助。