PrimeFaces openDialog在嵌套对话框中无法正常工作

时间:2016-08-27 20:09:56

标签: primefaces dialog nested

我正在使用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 + "");
}

还有其他人发现了类似的问题吗?任何帮助解决或解决这个问题都将非常感激。

1 个答案:

答案 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>