3 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
我知道你想根據(jù)name
輸入字段進(jìn)行過(guò)濾。在<p:commandButton>
默認(rèn)情況下,發(fā)送一個(gè)Ajax請(qǐng)求,并且具有process
屬性,其中可以指定要在提交處理的組件。在您的特定情況下,您應(yīng)該只處理name
輸入字段和當(dāng)前按鈕(以便調(diào)用其操作)。
<p:commandButton process="@this name" ... />
該process
屬性可以采用空間分隔的組件的(相對(duì))客戶端ID集合,其中@this
引用當(dāng)前組件。它默認(rèn)為<p:commandButton>
to @form
(覆蓋當(dāng)前表單的所有輸入字段和按下的按鈕),這就是為什么它們都在您的初始嘗試中得到驗(yàn)證的原因。在上面的示例中,不會(huì)處理所有其他輸入字段(因此也不會(huì)進(jìn)行驗(yàn)證)。
但是,如果您打算在按下相關(guān)按鈕時(shí)跳過(guò)所有字段的required
驗(yàn)證,那么您最終可以處理多個(gè)不一定需要全部填寫(xiě)的字段,那么您需要?jiǎng)?chuàng)建一個(gè)條件而不是檢查按鈕是否被按下。例如,只有在按下保存按鈕時(shí)才進(jìn)行評(píng)估: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"
當(dāng)按下不同的按鈕時(shí),它將不會(huì)被驗(yàn)證。上面示例中的技巧是按下的按鈕的名稱(本質(zhì)上是客戶端ID)已作為請(qǐng)求參數(shù)發(fā)送,您可以在請(qǐng)求參數(shù)映射中檢查其存在。
也可以看看:

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
除了BalusC的答案(非常有用和完整),我想補(bǔ)充一點(diǎn),當(dāng)你使用<h:commandButton />
它時(shí),它將驗(yàn)證(必需的,自定義驗(yàn)證)<h:form />
命令按鈕所在位置的所有字段,因此當(dāng)你需要使用多個(gè)字段時(shí)在命令按鈕中,您可以認(rèn)為使用不同<h:form />
的不同職責(zé)來(lái)避免命令按鈕的提交操作中的意外行為是一種很好的做法。在BalusC的答案中很好地解釋了:JSF頁(yè)面中的多個(gè)h:表單
如果您的表單有驗(yàn)證而且您沒(méi)有更新<h:form />
或者您沒(méi)有顯示消息,那么您可能會(huì)頭疼,認(rèn)為<h:commandButton />
未觸發(fā)您的操作,但可能是未顯示的驗(yàn)證問(wèn)題。

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
我用非ajax提交測(cè)試了這個(gè):
<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按鈕提交時(shí)才需要驗(yàn)證第一個(gè)輸入。
添加回答
舉報(bào)