[英]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' && #{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函數隱藏。
這是解決您特定問題的小技巧:
<h:commandButton ... />
相同的<h:form>
創建一個<h:inputHidden id="closeDialogFlag" value="#{fooController.closeDialogFlag}"/>
<h:commandButton ... />
。 在這里,我假設#{fooController.closeDialogFlag}
是boolean
類型。 closeDialogFlag
。 function(data){ if(data.status === 'success' && $('input#closeDialogFlag').val() === 'true') { $('#migrationEditDialogModal').modal('hide'); } }
function(data){ if(data.status === 'success' && $('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.