【问题标题】:JSF Primefaces - bypass validation in p:ajax [duplicate]JSF Primefaces - 在 p:ajax 中绕过验证 [重复]
【发布时间】:2014-11-25 16:48:34
【问题描述】:

我在一个表单中有一个p:ajax,它在选择中触发change 事件。我还有一个单独的提交按钮来提交表单。

表单包含多个验证。我想在p:ajax 通话期间绕过所有验证。相反,所有验证都应该在表单提交期间进行。

这是我的表单:Field1Field2必填。但是在 p:ajax 调用期间应该绕过这些验证,这反过来会根据选定的 Field2 值呈现 Field3

我该怎么做?

<h:body>

    <h:form id="formId">

        <p:outputPanel autoUpdate="true">

            <p:message for="field1Id field2Id" />

            <p:panel id="panelId">
                <p:panelGrid>

                    <p:row>
                        <p:column>
                            <h:outputText value="Field1:" />
                        </p:column>
                        <p:column>
                            <p:inputText
                                id="field1Id"
                                required="true"
                                requiredMessage="Field1 is Required!"
                                value="#{testBean.field1}"
                                size="5"
                                maxlength="30" />
                        </p:column>
                    </p:row>

                    <p:row>
                        <p:column>
                            <h:outputText value="Field2:" />
                        </p:column>
                        <p:column>
                            <p:selectOneMenu
                                id="field2Id"
                                value="#{testBean.field2}"
                                required="true"
                                requiredMessage="Field2 is Required!">
                                <f:selectItems
                                    value="#{testBean.fields}"
                                    var="var1"
                                    itemDescription="#{var1.description}"
                                    itemLabel="#{var1.description}"
                                    itemValue="#{var1.id}" />

                                <p:ajax
                                    process="@form"
                                    event="change" />

                            </p:selectOneMenu>
                        </p:column>
                    </p:row>

                    <p:row rendered="#{testBean.field2 > 0}">
                        <p:column>
                            <h:outputText value="Field3:" />
                        </p:column>
                        <p:column>
                            <p:inputText
                                value="#{testBean.field3}"
                                size="5"
                                maxlength="10" />
                        </p:column>
                    </p:row>

                </p:panelGrid>
                <p:commandButton
                    value="Save"
                    action="#{testBean.saveForm()}"
                    process="@form" />
            </p:panel>
        </p:outputPanel>

    </h:form>

</h:body>

【问题讨论】:

  • 如果没有看到任何有关您的表单的信息,这将很难提供帮助!
  • this 可能会帮助你。

标签: jsf-2 primefaces


【解决方案1】:

您可以通过以下代码实现。我的代码只是在按钮处添加绑定属性(binding="{save}"),并将required="true"更改为required="#{not empty param[save.clientId]}"

<h:body>
    <h:form id="formId">
        <p:outputPanel autoUpdate="true">
            <p:message for="field1Id field2Id" />
            <p:panel id="panelId">
                <p:panelGrid>
                    <p:row>
                        <p:column>
                            <h:outputText value="Field1:" />
                        </p:column>
                        <p:column>
                            <p:inputText
                                id="field1Id"
                                required="#{not empty param[save.clientId]}"
                                requiredMessage="Field1 is Required!"
                                value="#{testBean.field1}"
                                size="5"
                                maxlength="30" />
                        </p:column>
                    </p:row>
                    <p:row>
                        <p:column>
                            <h:outputText value="Field2:" />
                        </p:column>
                        <p:column>
                            <p:selectOneMenu
                                id="field2Id"
                                value="#{testBean.field2}"
                                required="#{not empty param[save.clientId]}"
                                requiredMessage="Field2 is Required!">
                                <f:selectItems
                                    value="#{testBean.fields}"
                                    var="var1"
                                    itemDescription="#{var1.description}"
                                    itemLabel="#{var1.description}"
                                    itemValue="#{var1.id}" />
                                <p:ajax
                                    process="@form"
                                    event="change" />

                            </p:selectOneMenu>
                        </p:column>
                    </p:row>
                    <p:row rendered="#{testBean.field2 > 0}">
                        <p:column>
                            <h:outputText value="Field3:" />
                        </p:column>
                        <p:column>
                            <p:inputText
                                value="#{testBean.field3}"
                                size="5"
                                maxlength="10" />
                        </p:column>
                    </p:row>
                </p:panelGrid>
                <p:commandButton
                    value="Save"
                    binding="{save}"
                    action="#{testBean.saveForm()}"
                    process="@form" />
            </p:panel>
        </p:outputPanel>
    </h:form>
</h:body>

此方法由link 提出。

【讨论】:

    【解决方案2】:

    如果你愿意使用omnifaces,有一个ignoreValidationFailed 标签。

    在 omnifaces 展示中查看示例:

    <o:form>
      ...
      <h:commandButton value="save valid data" action="#{bean.saveValidData}">
        <o:ignoreValidationFailed />
        <f:ajax execute="@form" />
      </h:commandButton>
    
    </o:form>
    

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 2013-01-05
      • 2012-05-06
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2013-11-25
      • 2011-08-20
      相关资源
      最近更新 更多