Java 有没有办法中止AjaxBehaviorEvent侦听器或将其他信息传递给f:AjaxOneEvent?
我已经在我的控制器中创建了监听器,类似的Java 有没有办法中止AjaxBehaviorEvent侦听器或将其他信息传递给f:AjaxOneEvent?,java,javascript,ajax,jsf,Java,Javascript,Ajax,Jsf,我已经在我的控制器中创建了监听器,类似的 public class FooController { public void doSomething(AjaxBehaviorEvent evt) { closeDialogFlag = true; .. if(!isValid){ closeDialogFlag = false; } } } 还有我的JSF按钮 <h:commandBut
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请求返回另一种状态而不是成功
PS:我不想使用Primefaces、Richfaces等
编辑:
小修正。
如果我将
f:ajax
添加到属性render
value@this
,那么我的标志将成功提取为true
,但事实上,在我的ajax请求之后,我的对话框不会被JavaScript函数隐藏。下面是解决您具体问题的一个小技巧:
相同的
中创建一个
。在这里,我假设#{fooController.closeDialogFlag}
是boolean
类型closeDialogFlag
function(data){if(data.status=='success'&;$('input#closeDialogFlag').val()=='true'){$('migrationedidialogmodal').modal('hide');}}
$('input#closeDialogFlag')
更改为指向正确的ID(取决于家长的ID)
这是因为当
data.status==“success”
时,组件已经用它们的新值进行了渲染。我用同样的方法进行了渲染,它工作了,解决了我的问题。但我认为更好的解决方案是将监听器中的内容传递给JavaScript函数,该函数在onevent
中调用,您知道怎么做吗?我试着用谷歌搜索,但没有发现任何有用的东西。但是仍然完成总比完美好,谢谢你的帮助。你可以将额外的参数传递给onevent
(和onerror
),但不能传递EL表达式(据我所知)onevent=“function(data){myFunction(data,'extra 1','extra 2');}”
是的,但这样我只能传递JS中的参数,不是从侦听器派生的。无论如何,谢谢你抽出时间。顺致敬意,