我有以下情况:
单击按钮后,将完成一些业务逻辑,完成后,应显示带有报告的新选项卡.
<p:commandButton value="this button" update="growlMain"
actionListener="#{myBean.businesslogic}"
onstart="ajaxDialog.show();"
oncomplete="ajaxDialog.hide();"
onsuccess="window.open('./report.jsp', '_newtab');" />
Run Code Online (Sandbox Code Playgroud)
这不起作用:(
如果业务逻辑仅持续几毫秒,则以下工作:
<p:commandButton value="this button" update="growlMain"
actionListener="#{myBean.fastbusinesslogic}"
onclick="window.open('./report.jsp', '_newtab');" />
Run Code Online (Sandbox Code Playgroud)
onclick打开一个新的选项卡,也像onstart这样的东西,但它不能用于onccess或oncomplete.为什么?是否存在持续几秒钟的业务逻辑解决方案?
And*_*dre 34
在创建ajax请求之前调用onclick(纯客户端),而在服务器响应ajax请求后执行oncomplete和onsuccess.因此,如果您需要在显示对话框之前执行某些业务逻辑,例如,您希望使用oncomplete.这就是我一直用的东西.
你也可以在oncomplete中调整你的javascript,只有在没有验证错误的情况下才能执行.直观地说,我认为onccess会表现得像那样,只有在没有验证错误的情况下执行,但事情并非如此.我真的不知道他们之间的区别.我假设有一种方法可以在后台bean中标记成功= false,但我无法在文档中找到它.
如果要检查oncomplete属性中的验证,请执行以下操作:
oncomplete="if (!args.validationFailed){someDialog.hide()}"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只有在正确验证字段后才能关闭对话框.实际上,您可以从支持bean注入参数,并在提供请求后在javascript中使用它们.在您的支持bean中,您可以执行以下操作:
RequestContext.getCurrentInstance().addCallbackParam("showDialog", false);
Run Code Online (Sandbox Code Playgroud)
您可以在不完整的属性中访问这样的参数:
oncomplete="if (args && args.showDialog){someDialog.show()}else{ alert('the bean didnt let me open the dialog')}"
Run Code Online (Sandbox Code Playgroud)
无论如何,我希望有所帮助.
小智 7
我注意到,PrimeFaces命令按钮的成功不起作用.然而,即使存在错误,oncomplete仍然可以工作并且需要它,例如在我的情况下即使我的业务逻辑中存在错误也显示成功对话框.试图使用onsuccess但不起作用.您可以尝试完成如下:
<p:commandButton value="this button" update="growlMain"
actionListener="#{myBean.businesslogic}"
onstart="ajaxDialog.show();"
oncomplete="ajaxDialog.hide(); window.open('./report.jsp', '_newtab');"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53126 次 |
| 最近记录: |