我正在使用PrimeFaces 6.0,我发现使用嵌套对话框时出现问题。 RequestContext.openDialog 无法正常运行。它不会抛出任何异常,但它不会打开对话框。
我根据相同的整页布局构建了5页(P1到P5)。每个页面都包含 p:dataTable 。 p:dataTable 的 p:列带有 p:commandButton ,可在新对话框中打开下一页。这就是我发现的:在某些页面上,第一行的按钮不起作用;其余行的按钮正常工作。
问题似乎不是行数据固有的。当第一行的按钮失败时,无论在那里显示的行如何,它都会失败。行可以以不同的方式排序(因此第一行会有所不同),第一行的按钮将继续失败,其余按钮将继续工作。这个问题似乎也不是页面所固有的。当页面是root(打开第一个对话框的那个)时,所有按钮都能正常工作。问题只发生在对话框中。
这是按钮:
<p:commandButton
icon="fa fa-folder-open"
action="#{ambientePrueba11.openDialog(currentRow)}"
partialSubmit="true"
process="@this"
update="@none">
<p:ajax
event="dialogReturn"
listener="#{ambientePrueba11.onDialogReturn}"
update="dataTable"/>
</p:commandButton>
这是支持bean中的代码(5个bean中的每个都有不同的结果,但代码的其余部分是相同的):
public String openDialog(AmbientePrueba row) {
EventLogger.log(this, "openDialog", getDenominacion(row));
Object identificacion = getIdentificacion(row);
String key = "PaquetePrueba11";
String outcome = FacesUtils.getPageKeyFacesOutcome(key);
Map<String, Object> options = new HashMap<>();
options.put("modal", true);
options.put("resizable", true);
options.put("draggable", true);
options.put("width", 1260);
options.put("height", 860);
options.put("contentWidth", "100%");
options.put("contentHeight", "100%");
options.put("closable", true);
options.put("includeViewParams", true);
options.put("minimizable", true);
options.put("maximizable", true);
Map<String, List<String>> params = new HashMap<>();
params.put(CPP.ID_RECURSO, toList(identificacion));
params.put(CPP.ID_RECURSO_MAESTRO, toList(identificacion));
params.put(Global.PARAMETRO_FRAMEWORK_SESION, toList(getSessionFrame()));
params.put(Global.PARAMETRO_CONDICION_SESION, toList(MODAL));
RequestContext.getCurrentInstance().openDialog(outcome, options, params);
return null;
}
private List<String> toList(Object value) {
List<String> paramValue = new ArrayList<>();
paramValue.add(value + "");
return paramValue;
}
public void onDialogReturn(SelectEvent event) {
Object response = event.getObject();
facesLogger.info(response + "");
}
还有其他人发现了类似的问题吗?任何帮助解决或解决这个问题都将非常感激。
答案 0 :(得分:0)
经过一些测试,我找到了一个解决方法。我只是在每个页面中给了一个不同的 id 按钮,现在所有页面的所有按钮都运行正常。
现在,页面P1的按钮(因为 id 建议)看起来像这样:
<p:commandButton
id=buttonOfPage1
icon="fa fa-folder-open"
action="#{ambientePrueba11.openDialog(currentRow)}"
partialSubmit="true"
process="@this"
update="@none">
<p:ajax
event="dialogReturn"
listener="#{ambientePrueba11.onDialogReturn}"
update="dataTable"/>
</p:commandButton>