it-swarm.cn

Primefaces onclick和onsuccess差异

我有以下情况:

单击按钮后,将完成一些业务逻辑,完成后,应显示带有报告的新选项卡。

<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这样的东西,但它不能用于onccess或oncomplete。为什么?是否存在持续几秒钟的业务逻辑解决方案?

16
Ziagl

我注意到,PrimeFaces命令按钮的成功不起作用。然而,即使存在错误,oncomplete仍然有效并且需要它,例如在我的情况下即使我的业务逻辑中存在错误也显示成功对话框。试图使用onsuccess但不起作用。您可以尝试完成如下:

<p:commandButton value="this button" update="growlMain"
                 actionListener="#{myBean.businesslogic}" 
                 onstart="ajaxDialog.show();"
                 oncomplete="ajaxDialog.hide(); window.open('./report.jsp', '_newtab');"/>
7
Gunjan Kalra

在创建ajax请求之前调用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 &amp;&amp; args.showDialog){someDialog.show()}else{ alert('the bean didnt let me open the dialog')}"

无论如何,我希望有所帮助。

33
Andre

你可以在这里看到差异:

Primefaces和ajax onsuccess事件

或者使用onsuccess,您可以在完全加载DOM之前执行某些操作

1
makkasi