【发布时间】:2014-03-12 11:49:33
【问题描述】:
我在我的控制器中创建了监听器,类似的东西..
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}在页面加载时被提取并且在AJAX请求后没有更新。我需要刷新页面以查看输出代码中的新值。
问题是:
如何在我的听众中将附加信息传递给onevent=function(data) 中的data? (这个解决方案更适合我,因为它在各种情况下都很有用)或有什么方法可以在我的监听器中中止我的请求并强制我的 AJAX 请求返回另一个状态而不是success?
PS:我不想使用 Primefaces、Richfaces 等。
编辑:
小修正。
如果我将f:ajax 添加到属性render 值@this,则我的标志将成功提取为true,但实际上在我的AJAX 请求之后,我的对话框并没有被JavaScript 函数隐藏。
【问题讨论】:
标签: java javascript ajax jsf