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 Он помог мне начать свое решение.

Другие вопросы по тегам