使用Primefaces DialogFramework多次打开和关闭对话框

时间:2016-05-20 14:32:44

标签: jsf primefaces dialog

我使用Primefaces的Dialog框架时遇到问题。 (WildFly 8.2,Primefaces 5.3.12,Java 8,Eclipse 4.3.2,Ubuntu 14.04,Firefox / Chrome)

如果我打开一个对话框:

"ignored_packages"

然后将其关闭:

 RequestContext.getCurrentInstance().openDialog(...);

对话框已关闭,但现在如果我再次尝试打开它,则不会发生任何事情。 如果我查看Firefox控制台,我可以在关闭对话框后看到一个JavaScript错误:

RequestContext.getCurrentInstance().closeDialog(null);
在primefaces.js中的

这似乎就是这段代码:

TypeError: dlgWidget is undefined
PrimeFaces.dialog.DialogHandler.closeDialog()
primefaces.js.xhtml:6
b.closeDialog()
primefaces.js.xhtml:1
<anonyme>
jquery.js.xhtml:1
.globalEval/<()
jquery.js.xhtml:14
.globalEval()
jquery.js.xhtml:14
PrimeFaces.ajax.ResponseProcessor.doEval()
primefaces.js.xhtml:3
PrimeFaces.ajax.Response.handle()
primefaces.js.xhtml:3
PrimeFaces.ajax.Request.send/q.success()
primefaces.js.xhtml:3
bH.Callbacks/i()
jquery.js.xhtml:25
bH.Callbacks/cc.fireWith()
jquery.js.xhtml:25
cf()
jquery.js.xhtml:25
.send/i()
jquery.js.xhtml:25
primefaces.js.xhtml:6:3190

我有两种不同的行为:

  • 当我在Eclipse中工作时,没有错误(我可以多次打开/关闭对话框而没有任何问题)

  • 编译和部署我的软件时(EAR中的WAR)我遇到了Dialog Framework的问题。如果我用右上角的十字架(不是我的commandButton)关闭对话框,则没有问题。

您对部署时出现的问题有什么想法吗? 谢谢你的帮助。

托管bean

closeDialog : function(cfg) {
    var rootWindow = this.findRootWindow(), 
    dlgs = $(rootWindow.document.body).children('div.ui-dialog[data-pfdlgcid="' + cfg.pfdlgcid + '"]').not("[data-queuedforremoval]"),
    dlgsLength = dlgs.length, 
    dlg = dlgs.eq(dlgsLength - 1), 
    parentDlg = dlgsLength > 1 ? dlgs.eq(dlgsLength - 2) : null, 
    dlgWidget = rootWindow.PF(dlg.data("widgetvar")), 
    sourceWidgetVar = dlgWidget.cfg.sourceWidgetVar,
 ....

对话框模板:dialog_type_famille_article.xhtml

@ManagedBean
@ViewScoped  
public class FamilleArticlesController { 

public void actFermerDialog(ActionEvent actionEvent) {
    RequestContext.getCurrentInstance().closeDialog(null);
}

public void actDialogTypes(ActionEvent actionEvent) {

    Map<String,Object> options = new HashMap<String, Object>();
    options.put("modal", true);
    options.put("draggable", true);
    options.put("resizable", false);
    options.put("contentHeight", 320);

    Map<String,List<String>> params = new HashMap<String,List<String>>();
    List<String> list = new ArrayList<String>();
    list.add(modeEcran.modeString(EnumModeObjet.C_MO_INSERTION));
    params.put("modeEcranDefaut", list);

    RequestContext.getCurrentInstance().openDialog("articles/dialog_type_famille_article", options, params);

}

public void handleReturnDialogTypes(SelectEvent event) {
    if(event!=null && event.getObject()!=null) {
    }   
}
}

对话包括:famille_articles.xhtml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">

<h:head>
    <title>Type famille d'Article</title>
    <style type="text/css">
        .ui-widget {
            font-size: 90%;
        }
    </style>
</h:head>

<h:body>
    <h:form id="idDialogFamilleArticle">    
        <ui:include src="famille_articles.xhtml"/>
    </h:form>
</h:body>
</html>

0 个答案:

没有答案