Primefaces v.5.3.5 подтверждают, что проблема рендеринга в диалоге вне основной h: формы и внутри главной формы отображается, но она не работает должным образом
Я использую PF v.5.3.5 и JSF v.2.2.8. Это частая тема в SO. Я заметил, что в документации PF v.5.3.5 есть ошибка, связанная с атрибутом appendTo.
1-й подход
Отображается p: verifyDialog, и отображаются кнопки команд, но действия не работают, и сообщение не отображается, если оно помещено во вложенную h: форму.
2-й подход
Если я помещу это диалоговое окно за пределы главной формы h: оно вообще не будет отображаться, даже если я добавлю атрибут global="true".
3-й подход
Рендеринг p: verifyDialog и командные кнопки отображаются, но действия не работают, и сообщение отображается, если вложенная h: форма удалена.
<h:form>
...
<p:confirmDialog id="askSessionDialog1" widgetVar="askSessionDialog1" severity="alert"
appendTo="@(body)" rendered="#{treeData.askSessionDialogRendered}" visible="#{treeData.askSessionDialogRendered}">
<h:form>
<f:facet name="message">
<h:outputText value="#{msg.WEB_ADMIN_PAGES_TREESEGMENT_NOSESSION}" escape="false"/>
</f:facet>
<p:commandButton value="#{msg.WEB_BUTTONS_OK}" action="#{treeData.save(false, true)}" icon="fa fa-check"
update="@(form)" type="button" />
<p:commandButton value="#{msg.WEB_BUTTONS_CANCEL}" action="#{treeData.setAskSessionDialogRendered(false)}"
icon="fa fa-close" onclick="PF('askSessionDialog1.hide()')" update="@(form)" type="reset" />
</h:form>
</p:confirmDialog>
...
</h:form>
BECKEND PART
setAskSessionDialogRendered(true);
RequestContext.getCurrentInstance().update("treeSegmentForm askSessionDialog askTurnOffDialog askSessionDialog1 askTurnOffDialog1");
Заранее спасибо за конструктивные посты и комментарии.
1 ответ
Решено Это лучший подход, который работает для меня сейчас.
<h:form>
...
<p:confirmDialog id="askSessionDialog" widgetVar="askSessionDialog" severity="alert"
appendTo="@(body)" rendered="#{treeData.askSessionDialogRendered}" visible="#{treeData.askSessionDialogRendered}">
<f:facet name="message">
<h:outputText value="#{msg.WEB_ADMIN_PAGES_TREESEGMENT_NOSESSION}" escape="false"/>
</f:facet>
<h:form>
<p:commandButton value="#{msg.WEB_BUTTONS_OK}" icon="fa fa-check" type="button" accesskey="o">
<p:ajax event="click" listener="#{treeData.save(false, true)}" oncomplete="PF('askSessionDialog').hide()"
update="@(form)" />
</p:commandButton>
<p:commandButton value="#{msg.WEB_BUTTONS_CANCEL}" icon="fa fa-close" type="reset" accesskey="c">
<p:ajax event="click" listener="#{treeData.setAskSessionDialogRendered(false)}"
onsuccess="PF('askSessionDialog').hide()" update="@(form)" />
</p:commandButton>
</h:form>
</p:confirmDialog>
...
</h:form>
BACKEND
setAskSessionDialogRendered(true);
RequestContext.getCurrentInstance().update("treeSegmentForm");
СПАСИБО СПАСИБО: @YagamiLight Он помог мне начать свое решение.