我已经在我的控制器中创建了监听器,类似的东西......
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请求后没有更新。我需要刷新页面以查看输出代码中的新值。
问题是:
如何将其他信息传递给我的听众data
中的onevent=function(data)
? (这个解决方案对我来说更合适,因为它在各种情况下都很有用) OR 有没有办法在我的监听器中中止我的请求并强制我的AJAX请求返回另一个状态而不是success
?
PS:我不想使用Primefaces,Richfaces等。
修改:
小修正。
如果我将f:ajax
添加到属性render
值@this
,那么我的标志会成功提取为true
,但实际上在我的AJAX请求之后我的对话框没有被JavaScript隐藏功能
答案 0 :(得分:0)
这是针对您的具体问题的一个小技巧:
<h:inputHidden id="closeDialogFlag" value="#{fooController.closeDialogFlag}"/>
相同的<h:form>
中创建<h:commandButton ... />
。在这里,我认为#{fooController.closeDialogFlag}
的类型为boolean
。closeDialogFlag
。function(data){ if(data.status === 'success' && $('input#closeDialogFlag').val() === 'true') { $('#migrationEditDialogModal').modal('hide'); } }
您必须更改$('input#closeDialogFlag')
以指向正确的ID(取决于父母的身份)。
这是有效的,因为在data.status === 'success'
时,组件已经使用新值进行渲染。