Я новичок в JSF и в других местах. Я использую Primefaces Framework, чтобы получить модальные условия соглашения об обслуживании. Проблема, с которой я сталкиваюсь, заключается в том, что мой обработчик события dialogReturn не вызывается, когда диалог закрывается, а модальное наложение остается на странице, хотя сам диалог закрывается. Модальным наложением может быть красная селедка, потому что метод dialogReturn не вызывается, когда диалог также не является модальным.Primefaces Диалог диалогового окна Диалоговое окно обработчика событий, не вызываемого
Вот соответствующие фрагменты кода:
Форма, из которого создается диалоговое окно:
<h:form prependId="false">
<ul>
<ui:repeat value="#{serviceEditor.service.subsystems}" var="ss">
<li>
<em>#{ss.name}</em> - #{ss.description}<br/>
<ui:fragment rendered="#{identity.loggedIn}">
<ui:fragment rendered="#{grantManager.hasAccess(ss)}">
(You have access to this dataset.)
<h:commandButton value="Discontinue Access" action="#{grantManager.unrequestAccess(ss)}"/>
</ui:fragment>
<ui:fragment rendered="#{!grantManager.hasAccess(ss)}">
<p:commandButton value="Request Access"
actionListener="#{serviceDialog.display(ss)}"
styleClass="btn btn-primary" >
<p:ajax event="dialogReturn"
listener="#{serviceEditor.acceptDialogHandler}" />
</p:commandButton>
</ui:fragment>
...
ServiceEditor помечается @Named @Stateful @ConversationScoped
Код ActionListener для Диалоговое окно:
public void display (ServiceSubsystem sub)
{
if (sub == null)
{
log.error("Service Accept dialog attempt with null subservice. Lose.");
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Subservice Unavailable", "We seem to have misplaced that service. This has been logged for investigation.");
RequestContext.getCurrentInstance().showMessageInDialog(message);
return;
}
log.info("svcDlg: Displaying accept dialog for service: {}.{}", sub.getService().getName(), sub.getName());
this.sub = sub;
Map<String, Object> dlgOpts = new HashMap<>(2);
dlgOpts.put("modal", true);
RequestContext.getCurrentInstance().openDialog("serviceAcceptDialog", dlgOpts, null);
log.info("svcDlg: Did that accept dialog work out?");
}
ДействиеLis Tener код кнопки принимать команды в диалоге:
public void accept()
{
log.info("Accepted {}.{}", sub.getService().getName(), sub.getName());
...
String destination = "/service?faces-redirect=true&uuid=" + sub.getService().getUuid();
log.info("Sending user to: {}", destination);
RequestContext.getCurrentInstance().closeDialog(destination);
}
И, наконец, в диалоговом возвратного слушателя, который не вызывается:
public void acceptDialogHandler (SelectEvent event)
{
String dest = (String) event.getObject();
log.info("Service accept dialog closed. sending here: ", dest);
((ConfigurableNavigationHandler) FacesContext.getCurrentInstance().getApplication().getNavigationHandler())
.performNavigation(dest);
}
Что я пропустил в документации? Или это ошибка?
Спасибо за предложение. На этой основе работает версия. У меня все еще есть горячее интеллектуальное желание узнать, почему структура не работает. –