Primefaces onclick和onsuccess差异

时间:2011-09-13 12:59:34

标签: jsf primefaces

我有以下情况:

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

<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。为什么?是否存在持续几秒钟的业务逻辑解决方案?

3 个答案:

答案 0 :(得分:33)

在创建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')}"

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

答案 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)

你可以在这里看到不同之处:

Primefaces and ajax onsuccess event

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