3 回答
TA貢獻1785條經驗 獲得超4個贊
我知道你想根據name輸入字段進行過濾。在<p:commandButton>默認情況下,發送一個Ajax請求,并且具有process屬性,其中可以指定要在提交處理的組件。在您的特定情況下,您應該只處理name輸入字段和當前按鈕(以便調用其操作)。
<p:commandButton process="@this name" ... />
該process屬性可以采用空間分隔的組件的(相對)客戶端ID集合,其中@this引用當前組件。它默認為<p:commandButton>to @form(覆蓋當前表單的所有輸入字段和按下的按鈕),這就是為什么它們都在您的初始嘗試中得到驗證的原因。在上面的示例中,不會處理所有其他輸入字段(因此也不會進行驗證)。
但是,如果您打算在按下相關按鈕時跳過所有字段的required驗證,那么您最終可以處理多個不一定需要全部填寫的字段,那么您需要創建一個條件而不是檢查按鈕是否被按下。例如,只有在按下保存按鈕時才進行評估:required="true"true
<p:inputText ... required="#{not empty param[save.clientId]}" />...<p:inputText ... required="#{not empty param[save.clientId]}" />...<p:commandButton binding="#{save}" value="Save" ... />這樣,required="true"當按下不同的按鈕時,它將不會被驗證。上面示例中的技巧是按下的按鈕的名稱(本質上是客戶端ID)已作為請求參數發送,您可以在請求參數映射中檢查其存在。
也可以看看:
TA貢獻1856條經驗 獲得超11個贊
除了BalusC的答案(非常有用和完整),我想補充一點,當你使用<h:commandButton />它時,它將驗證(必需的,自定義驗證)<h:form />命令按鈕所在位置的所有字段,因此當你需要使用多個字段時在命令按鈕中,您可以認為使用不同<h:form />的不同職責來避免命令按鈕的提交操作中的意外行為是一種很好的做法。在BalusC的答案中很好地解釋了:JSF頁面中的多個h:表單
如果您的表單有驗證而且您沒有更新<h:form />或者您沒有顯示消息,那么您可能會頭疼,認為<h:commandButton />未觸發您的操作,但可能是未顯示的驗證問題。
TA貢獻1893條經驗 獲得超10個贊
我用非ajax提交測試了這個:
<p:inputText ... required="#{not empty param.includeInSave1}" />...<p:inputText ... required="true" />...<p:commandButton value="Save1" ajax="false">
<f:param name="includeInSave1" value="true" /></p:commandButton><p:commandButton value="Save2" ajax="false" />只有在Save1按鈕提交時才需要驗證第一個輸入。
添加回答
舉報
