[validation] 如何讓驗證取決於按下的按鈕?



Answers

除了BalusC的答案(非常有用和完整),我想補充一點,當你使用<h:commandButton /> ,它將驗證(必需的,自定義驗證) <h:form />中命令按鈕所有的字段因此,當您需要使用多個命令按鈕時,您可以認為將不同的<h:form />用於不同的職責是一種很好的做法,以避免在命令按鈕的提交操作中出現意外行為。 在BalusC的回答中很好地解釋了: JSF頁面中的多個h:表單

如果您的表單有驗證並且您沒有更新<h:form />或者您沒有顯示消息,那麼您可能會頭疼,認為<h:commandButton />沒有觸發您的操作,但可能是驗證問題尚未顯示。

Question

我創建了表單,我希望在創建新表時在表上顯示以前存在的項。 我希望在填寫表格時顯示匹配的項目。 但是當我嘗試在沒有完成表單的情況下過濾列表時,會出現驗證消息,並且表格不會更新。

不知道是否可能,但我想做的事情是這樣的:

<h:form id="form">

    <h:outputText value="Name: "/>
    <p:inputText value="#{itemsBean.name}" id="name" required="true"/>
    <br/>
    <h:outputText value="Description: "/>
    <p:inputText value="#{itemsBean.description}" id="description" required="true"/>

    <p:commandButton value="Save" update="form" actionListener="#{itemsBean.save}"/> //validate and save
    <p:commandButton value="Filter" update="form" actionListener="#{itemsBean.updateItemsList}"/> //don't validate, and update the table.

    <p:dataTable id="list" value="#{itemsBean.itemsList}" var="item">     
        <p:column>
            <h:outputText value="#{item.name}"/>
        </p:column>
        <p:column>
            <h:outputText value="#{item.description}"/>
        </p:column>
    </p:dataTable>

</h:form>

我是JSF的新手。




像這樣更改過濾器命令按鈕以忽略驗證:

<p:commandButton value="Filter" update="list" actionListener="#{itemsBean.updateItemsList}" process="@this"/>

編輯:

有關SO的相關帖子,我認為這也將解決您的問題

JSF 2.0:如何跳過JSR-303 bean驗證?




Related