p:selectBooleanCheckBox在p:对话框中不起作用

时间:2016-08-25 19:25:23

标签: jsf primefaces

我正在使用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只是在对话框中不起作用吗?

1 个答案:

答案 0 :(得分:0)

我想出来了。这是因为对话框是一种形式。似乎当对话框在表单中,并且您在对话框本身中有一个表单时,该组件将不会被处理。似乎JSF / primefaces不喜欢在表单中定义的多层表单或对话框。如果您遇到类似问题,请确保您的对话框是在任何表单之外定义的。移动对话框可能会导致组件路径发生变化。解决这个问题的最简单方法是使用primefaces方便的p:component标签,如update =“:#{p:component('compoment_name')}”&gt;这将使它找到它,无论组件出现在树的哪个位置。