我正在尝试在Primefaces 5.0中有条件地弹出一个对话框而不使用<p:commandButton>
后端。
我看过here,here和here,并尝试了所提供的每个解决方案,但都没有。
我遇到的问题是当你点击按钮时如何让对话框显示在页面上;在那之前,一切似乎都很顺利。
按钮的XHTML:
<c:choose>
<c:when test="#{businessLayer.context eq 'REF_INFO'}">
<p:commandButton value="Submit PA"
disabled="#{outcomes.size() eq 0 or businessLayer.ticket eq null}"
onclick="PF('refInfoDialog').show()"
actionListener="#{businessLayer.splund('submitting ref info pa')}"
type="button"/>
<!-- onstart="PF('loadingResults').show()"
onerror="PF('errorDialog').show()"
oncomplete="PF('loadingResults').hide(); PF('refInfoDialog').show()"-->
</c:when>
<c:when test="#{businessLayer.context eq 'FAXBACK'}">
<p:commandButton value="Submit PA"
disabled="#{outcomes.size() eq 0 or businessLayer.ticket eq null}"
onclick="PF('faxBackDialog').show()"
actionListener="#{businessLayer.splund('submitting faxback pa')}"
type="button"/>
<!-- onstart="PF('loadingResults').show()"
onerror="PF('errorDialog').show()"
oncomplete="PF('loadingResults').hide(); PF('faxBackDialog').show()"/>-->
</c:when>
<c:otherwise>
<p:commandButton value="Submit PA"
disabled="#{outcomes.size() eq 0 or businessLayer.ticket eq null}"
onstart="PF('loadingResults').show()"
onerror="PF('errorDialog').show()"
oncomplete="PF('loadingResults').hide()"
actionListener="#{businessLayer.splund('submitting regular pa')}"/>
</c:otherwise>
</c:choose>
其中一个对话框:
<p:dialog widgetVar="refInfoDialog"
id="refInfoDialog"
closable="true"
draggable="false"
resizable="false"
showHeader="true">
<h:outputLabel for="refInfoInput" value="Ticket ID"/>
<h:inputText id="refInfoInput"/>
<p:commandButton value="OK"
onstart="PF('loadingResults').show()"
onerror="PF('errorDialog').show()"
oncomplete="PF('loadingResults').hide(); PF('refInfoDialog').hide(); _SUBMIT_REF_INFO()"/>
<p:commandButton value="Cancel"
onstart="PF('loadingResults').show()"
onerror="PF('errorDialog').show()"
oncomplete="PF('loadingResults').hide(); PF('refInfoDialog').hide()"/>
</p:dialog>
#{businessLayer.splund(...)}
是后端的日志记录功能,用于调试目的,对话框的定义与按钮的表单元素相同。
loadingResults
和errorDialog
对话框应按照预期显示,但我无法显示refInfoDialog
或faxBackDialog
完全没有。我已尝试将PF('<dialog_name>').show()
放入各种onclick=""
,oncomplete=""
,actionListener=""
和onstart=""
,但它并未导致其中任何一个出现在单击它们各自的按钮。
更新:
事实证明onclick事件正常,但由于某种原因,对话框显示在其他div后面,因为它在父div之外。 JSF不是很棒吗? /讽刺
答案 0 :(得分:0)
原来,如果你想要一个对话框出现,无论页面上的某个按钮是什么,它都需要包含在其他所有内容之后,否则它将被限制在它出现的div的框架内。 / p>
但是,这种做法打败了能够将页面分成多个子页面进行开发的整个想法。