亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓驗證取決于按下的按鈕?

如何讓驗證取決于按下的按鈕?

如何讓驗證取決于按下的按鈕?我創建了表單,我希望在新表創建時在表上顯示以前的現有項目。我希望在填寫表格時顯示匹配的項目。但是當我嘗試在沒有完成表單的情況下過濾列表時,會出現驗證消息,并且表格不會更新。不知道是否可能,但我想做的事情是這樣的:<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的新手。
查看完整描述

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)已作為請求參數發送,您可以在請求參數映射中檢查其存在。

也可以看看:


查看完整回答
反對 回復 2019-08-02
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

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

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


查看完整回答
反對 回復 2019-08-02
?
白豬掌柜的

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按鈕提交時才需要驗證第一個輸入。


查看完整回答
反對 回復 2019-08-02
  • 3 回答
  • 0 關注
  • 521 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號