我使用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>