java - primefaces 4 - 如何在每次事件发生时创建新的对话框实例

标签 java javascript jquery jsf primefaces

是否可以在同一按钮单击事件上打开一个新的对话框实例?

例如:

click -> open dialog
click again -> open a second dialog, keeping the first one opened
click again -> ... and so on

最佳答案

这是根据您的要求提供的解决方案(iframe)

xhtml

    <h:form id="form">

        <div id="dialogs"></div>

        <p:commandButton value="New Terminal" 
                         update="dilaogContainer"
                         oncomplete="handleNewDialog()"/>

        <h:panelGroup id="dilaogContainer">
            <p:dialog id="#{bean.nextDialogId()}" height="300" width="300" >                     
                <iframe src="http://www.w3schools.com/" width="100%" height="100%"></iframe>
            </p:dialog>
        </h:panelGroup>

    </h:form>

bean

public String nextDialogId() {
    // Generate random id of 5 char
    return org.apache.commons.lang.RandomStringUtils.random(5, true, false);
}

JS

var dialogs = [];

function handleNewDialog() {
   newDialog = $(PrimeFaces.escapeClientId('form:dilaogContainer')).find(">:first-child");
   newDialog.appendTo("#dialogs");
   newDialogVar = getWidgetVar(newDialog.attr('id'));        
   newDialogVar.show();
   moveDialog(newDialogVar);
   dialogs.push(newDialogVar); 
}

function moveDialog(dialog) {
   if(dialogs.length > 0) {
       lastDialog = dialogs[dialogs.length -1];
       dialog.jq.css({'left' : lastDialog.jq.position().left+ 300 +'px'})
   } else {
       dialog.jq.css({'left' : '0px'})
   }
}

function getWidgetVar(id) {
   widgetName = 'widget_' + id.replace(/\:/g, '_');
   return window[widgetName];
}

在按钮上单击我们更新我们的dialogContainer,这样我们的对话框就会更新并使用新的ID 生成。我们将生成的对话框附加到对话框 div 中,将其置于容器之外,显示它,并根据其他显示的对话框重新定位它。

注意:请记住,此方法仅在 iframe 情况下有效,在这种情况下,我们的 DOM 树与 JSF 组件树不同步。

事情应该是这样的。

jsf dialogs

关于java - primefaces 4 - 如何在每次事件发生时创建新的对话框实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20763619/

相关文章:

java - servlet显示雷达图

javascript - 无法在 knockout js 中获取可观察的数据

javascript - 当一个元素或其任何后代失去焦点时,删除一个类

jquery - 使用 google chrome 检查 jquery-ui 自动完成列表?

java - 创建测试框架

java - 为所有 404 响应创建 servlet 过滤器

java - 动态创建JTextAreas?

javascript - 如何检测 Kind 是否已经注册

javascript - 如何获取用户输入并将字符串转换为可以在函数中以数学方式使用的整数?

javascript - 使用 Javascript 遍历表以追加列