簡體   English   中英

有什么方法可以中止AjaxBehaviorEvent偵聽器或將其他信息傳遞給f:ajax onevent?

[英]is any way to abort AjaxBehaviorEvent listener or pass additional info to f:ajax onevent?

我已經在控制器中創建了偵聽器,諸如此類。

public class FooController {
    public void doSomething(AjaxBehaviorEvent evt) {
        closeDialogFlag = true;
        ..
        if(!isValid){
            closeDialogFlag = false;
        }
    }
}

還有我的JSF按鈕。

<h:commandButton value="Do somenthing">
    <f:ajax 
        listener="#{fooController.doSomething}"
        execute=":editDialogForm:processTab" render="@this :editDialogForm:processTab :messageViewer:messageViewerPanel :results"
        onevent="function(data){ if(data.status === 'success' &amp;&amp; #{fooController.closeDialogFlag} ) { $('#migrationEditDialogModal').modal('hide'); } }"
    />
</h:commandButton>

但是我的closeDialogFlag在ajax請求完成后不起作用, #{fooController.closeDialogFlag}是頁面加載時提取了#{fooController.closeDialogFlag}值,並且在AJAX請求后未更新。 我需要刷新頁面才能在輸出代碼中看到新值。

問題是 :如何在偵聽器中的onevent=function(data)中將其他信息傳遞給data (此解決方案更適合我,因為它在各種情況下都將很有用) 或者是否有任何方法可以在偵聽器中中止我的請求並強制我的AJAX請求返回除success以外的其他狀態?

PS:我不想使用Primefaces,Richfaces等。

編輯 :小修正。 如果我將f:ajax添加到屬性render@this ,則我的標志成功提取為true但實際上在我的AJAX請求之后,我的對話框沒有被JavaScript函數隱藏。

這是解決您特定問題的小技巧:

  1. 在與您的<h:commandButton ... />相同的<h:form>創建一個<h:inputHidden id="closeDialogFlag" value="#{fooController.closeDialogFlag}"/> <h:commandButton ... /> 在這里,我假設#{fooController.closeDialogFlag}boolean類型。
  2. 在您的f:ajax中:
    1. 渲染組件closeDialogFlag
    2. 將事件中的條件更改為: function(data){ if(data.status === 'success' &amp;&amp; $('input#closeDialogFlag').val() === 'true') { $('#migrationEditDialogModal').modal('hide'); } } function(data){ if(data.status === 'success' &amp;&amp; $('input#closeDialogFlag').val() === 'true') { $('#migrationEditDialogModal').modal('hide'); } }

您將必須更改$('input#closeDialogFlag')以指向正確的ID(取決於父母的ID)。

之所以data.status === 'success' ,是因為當data.status === 'success' ,組件已經使用其新值進行了渲染。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM