我正在使用PrimeFaces 5.3,代码如下:
<p:dialog id="dlg1" appendTo="@(body)" header="Confirm Dialog" widgetVar="dlg1" modal="true">
<h:form id="dialogform">
<h:outputText id="confirmlabel" value="Are you Sure you want to #{reportRunnerNamedBean.currentCommand} ?" />
<br/>
<center>
Check to send only missed emails:<p:selectBooleanCheckbox id="sendOnlyMissedBox" value="#{reportRunnerNamedBean.sendMissedOnly}"></p:selectBooleanCheckbox><br/>
<p:commandButton id="yesButton" value="Yes" action="#{reportRunnerNamedBean.runCurrentCommand()}" onstart="startWait();PF('waitDialog').show();" oncomplete="PF('waitDialog').hide();stopWait();" onclick="PF('dlg1').hide();" process="@form"/>
<p:commandButton id="noButton" process="@this" value="No" onclick="PF('dlg1').hide();"/>
</center>
</h:form>
</p:dialog>
无论如何,sendMissedOnly
的支持bean值都设置为false。我已通过附加调试器确认了这一点。我甚至尝试在盒子中添加ajax,无论是否检查,它每次都是假的。 p:selectBooleanCheckbox
只是在对话框中不起作用吗?
答案 0 :(得分:0)
我想出来了。这是因为对话框是一种形式。似乎当对话框在表单中,并且您在对话框本身中有一个表单时,该组件将不会被处理。似乎JSF / primefaces不喜欢在表单中定义的多层表单或对话框。如果您遇到类似问题,请确保您的对话框是在任何表单之外定义的。移动对话框可能会导致组件路径发生变化。解决这个问题的最简单方法是使用primefaces方便的p:component标签,如update =“:#{p:component('compoment_name')}”&gt;这将使它找到它,无论组件出现在树的哪个位置。