Я использую PrimeFaces 6.0 и обнаружил проблему с использованием вложенных диалогов. RequestContext.openDialog работает неправильно. Он не выдает никаких исключений, но не открывает диалог.
Я создал 5 страниц (от P1 до P5) на основе одного и того же полного макета страницы. Каждая страница содержит p:dataTable. В p:dataTable есть p:column с p:commandButton для открытия следующей страницы в новом диалоговом окне. Вот что я обнаружил: на некоторых из этих страниц не работает кнопка первой строки; кнопки остальных рядов работают исправно.
Проблема, похоже, не связана с данными строки. Когда кнопка первой строки терпит неудачу, она терпит неудачу независимо от показанной там строки. Строки можно сортировать по-разному (поэтому первая будет отличаться), и кнопка первой строки будет продолжать работать с ошибкой, а остальные кнопки продолжат работать. Проблема, похоже, не связана со страницей. Все кнопки работают правильно, когда страница является корневой (та, которая открывает первый диалог). Проблема возникает только в диалоге.
Это кнопка:
<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>
Это код во вспомогательном компоненте (каждый из 5 компонентов имеет разный результат, но остальная часть кода одинакова):
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 + "");
}
Кто-нибудь еще нашел подобную проблему? Любая помощь в решении или обходе этой проблемы будет очень признательна.