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 && !args.validationFailed) PF('testDialog').hide()" />該if (args)檢查是必要的,因為當發生Ajax錯誤,從而引起新的JS錯誤,當你設法得到它可能是不存在的validationFailed,從它; 的&,而不是&強制性的理由解釋這個答案,如果有必要,你調用像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()" />TA貢獻1895條經驗 獲得超7個贊
我剛剛用谷歌搜索了這個解決方案?;旧衔业南敕ㄊ鞘褂胊ctionListener而不是按鈕的動作,并在支持bean中添加回調參數,然后檢查按鈕的oncomplete方法。示例部分代碼:
JSF第一:
<p:commandButton actionListener="#{myBean.doAction}"
oncomplete="if (!args.validationFailed && 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);
}}希望這有助于某人:)
添加回答
舉報
