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

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

提交后發生驗證錯誤時,保持p:對話框打開

提交后發生驗證錯誤時,保持p:對話框打開

提交后發生驗證錯誤時,保持p:對話框打開最小示例對話框:<p:dialog header="Test Dialog"             widgetVar="testDialog">    <h:form>      <p:inputText value="#{mbean.someValue}"/>      <p:commandButton value="Save"                       onsuccess="testDialog.hide()"                       actionListener="#{mbean.saveMethod}"/>    </h:form>       </p:dialog>我想要做的是讓mbean.saveMethod以某種方式阻止對話框關閉,如果有問題并且只通過growl輸出消息。這是驗證器無法幫助的情況,因為在將保存提交給后端服務器之前無法判斷someValue是否有效。目前我使用visible屬性執行此操作,并將其指向mbean中的布爾字段。這有效,但它使用戶界面變慢,因為彈出或關閉對話框需要命中服務器。
查看完整描述

3 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

onsuccess運行,如果AJAX請求本身是成功的(即有沒有網絡故障,未捕獲的異常等),如果不采取行動方法成功地調用。

給定一個<p:dialog widgetVar="testDialog">你可以刪除onsuccess和替換PrimeFaces它RequestContext#execute()里面saveMethod()

if (success) {
    RequestContext.getCurrentInstance().execute("PF('testDialog').hide()");}

注意:PF()在PrimeFaces 4.0中引入。在較舊的PrimeFaces版本中,您需要testDialog.hide()使用它。

如果您不希望控制器與特定于視圖的腳本混亂,您可以使用oncomplete而不是提供args具有布爾validationFailed屬性的對象:

<p:commandButton ...    oncomplete="if (args &amp;&amp; !args.validationFailed) PF('testDialog').hide()" />

if (args)檢查是必要的,因為當發生Ajax錯誤,從而引起新的JS錯誤,當你設法得到它可能是不存在的validationFailed,從它; 的&amp;,而不是&強制性的理由解釋這個答案,如果有必要,你調用像JS功能,重構oncomplete="hideDialogOnSuccess(args, testDialog)"如圖保持<P:對話框>打開時驗證失敗

后一種解決方案(稍加重寫)應該適用于普通的jsf h:commandButton和一個f:ajax


令人遺憾的是,PrimeFaces不支持RichFaces已經支持的內容:EL on*屬性的請求時重新評估。否則你也可以做到這一點:

<p:commandButton ...    oncomplete="if (#{not facesContext.validationFailed}) PF('testDialog').hide()" />



查看完整回答
反對 回復 2019-07-26
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

我剛剛用谷歌搜索了這個解決方案?;旧衔业南敕ㄊ鞘褂胊ctionListener而不是按鈕的動作,并在支持bean中添加回調參數,然后檢查按鈕的oncomplete方法。示例部分代碼:

JSF第一:

<p:commandButton actionListener="#{myBean.doAction}"
   oncomplete="if (!args.validationFailed &amp;&amp; args.saved) schedulesDialog.hide();" />

支持豆:

public void doAction(ActionEvent actionEvent) {
    // do your stuff here...
    if (ok) {
        RequestContext.getCurrentInstance().addCallbackParam("saved", true);
    } else {
        RequestContext.getCurrentInstance().addCallbackParam("saved", false);
    }}

希望這有助于某人:)


查看完整回答
反對 回復 2019-07-26
  • 3 回答
  • 0 關注
  • 634 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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