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