Primefaces v.5.3.5 确认在主要 h:form 和主窗体内部呈现对话框渲染问题,但它无法正常工作
Primefaces v.5.3.5 confirm dialog render issue outside main h:form and inside main form is rendered but it is not working properly
我正在使用 PF v.5.3.5 和 JSF v.2.2.8。这是 SO 中的一个常见话题。我注意到 PF v.5.3.5 文档中存在与 appendTo 属性相关的错误。
第一种方法
呈现 p:confirmDialog 并呈现命令按钮,但如果将其放置在嵌套 h:form.
中,则操作不起作用且消息不会呈现
第二种方法
如果我将此对话框放在主 h:form 之外,如果我添加 global="true" 属性,它也根本不会呈现。
第三种方法
呈现 p:confirmDialog 并呈现命令按钮,但如果移除嵌套的 h:form,则操作不起作用且呈现消息。
<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>
后端部分
setAskSessionDialogRendered(true);
RequestContext.getCurrentInstance().update("treeSegmentForm askSessionDialog askTurnOffDialog askSessionDialog1 askTurnOffDialog1");
提前感谢建设性的帖子和评论。
已解决
这是目前最适合我的方法。
<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>
后端
setAskSessionDialogRendered(true);
RequestContext.getCurrentInstance().update("treeSegmentForm");
特别感谢:@YagamiLight
他帮助我开始了我的解决方案。
我正在使用 PF v.5.3.5 和 JSF v.2.2.8。这是 SO 中的一个常见话题。我注意到 PF v.5.3.5 文档中存在与 appendTo 属性相关的错误。
第一种方法
呈现 p:confirmDialog 并呈现命令按钮,但如果将其放置在嵌套 h:form.
中,则操作不起作用且消息不会呈现第二种方法
如果我将此对话框放在主 h:form 之外,如果我添加 global="true" 属性,它也根本不会呈现。
第三种方法
呈现 p:confirmDialog 并呈现命令按钮,但如果移除嵌套的 h:form,则操作不起作用且呈现消息。
<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>
后端部分
setAskSessionDialogRendered(true);
RequestContext.getCurrentInstance().update("treeSegmentForm askSessionDialog askTurnOffDialog askSessionDialog1 askTurnOffDialog1");
提前感谢建设性的帖子和评论。
已解决 这是目前最适合我的方法。
<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>
后端
setAskSessionDialogRendered(true);
RequestContext.getCurrentInstance().update("treeSegmentForm");
特别感谢:@YagamiLight 他帮助我开始了我的解决方案。