如果表单未完全填充,则Primefaces打开确认对话框

时间:2017-10-09 19:49:32

标签: jsf primefaces

您好我正在尝试解决此问题。希望你能帮帮我。

我有一个带有选项问题的问题表单(textfields,checkbox,radiobuttons)。我正在尝试打开一个确认对话框(“有一些问题没有回答,你确定要继续吗?是/否”)只要有问题没有填写。我可以打开对话框要求确认。但我不能验证是否必须显示对话框或必须跳过它。

           <h:form>
               <div class="col-xs-12 ctg-home-button center">
                    <p:commandButton
                        id="cancel-button"
                        actionListener="#{answerSurveyView.restart}"
                        immediate="true"
                        styleClass="btn btn-default"
                        title="#{propertiesBean.getProperty('answer.cancel')}"
                        value="#{propertiesBean.getProperty('answer.cancel')}"
                        />
                    <h:outputText value="&#160;" />
                    <p:commandButton
                        id="answer-button"
                        action="#{answerSurveyView.saveAnswers}"
                        styleClass="btn btn-default"
                        title="#{propertiesBean.getProperty('answer.send')}"
                        update="answer-form"
                        value="#{propertiesBean.getProperty('answer.send')}"
                        >
                        <p:confirm header="Confirmation" message="#{propertiesBean.getProperty('answer.survey-confirmation')}" icon="ui-icon-alert" />
                    </p:commandButton>
                </div>
                <p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
                    <p:commandButton value="#{propertiesBean.getProperty('answer.send')}" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
                    <p:commandButton value="#{propertiesBean.getProperty('answer.close')}" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
                </p:confirmDialog>
           </h:form>

1 个答案:

答案 0 :(得分:1)

使用rendered的{​​{1}}属性来指示是否要渲染它。将confirmDialog属性设置为从视图返回的值,指示是否存在未解答的问题。

每次用户使用rendered on事件查询问题时重新加载confirmDialog,在您的视图上调用方法重新计算ajax属性;以unansweredQuestions ID作为值的update属性,以便在收到最后一个问题后,您可以将confirmDialog设置为rendered。 例如,如果您使用下拉列表为答案提供选项,则页面的代码可能如下所示:

false

您视图中的代码:

   <div class="col-xs-12 ctg-home-button center">
       <p:commandButton ....
       .....
   </div>

   <p:selectOneMenu value="#{answerSurveyView.firstQuestionAnswer}">
       <p:ajax listener="#{dropdownView.onAnswerSelect}" update="myConfirm" />
       <f:selectItem itemLabel="Select option" itemValue="" noSelectionOption="true" />
       <f:selectItems value="#{answerSurveyView.firstQuestionAnswerOptions}" />
   </p:selectOneMenu>

   <p:confirmDialog id='myConfirm' rendered="#{answerSurveyView.unansweredQuestions}" global="true" showEffect="fade" hideEffect="fade">
       <p:commandButton value="#{propertiesBean.getProperty('answer.send')}" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
       <p:commandButton value="#{propertiesBean.getProperty('answer.close')}" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
   </p:confirmDialog>