Primefaces onclick和onsuccess差异

Zia*_*agl 16 jsf primefaces

我有以下情况:

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

<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 &amp;&amp; args.showDialog){someDialog.show()}else{ alert('the bean didnt let me open the dialog')}"
Run Code Online (Sandbox Code Playgroud)

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

  • 我需要逃避符号和符号:oncomplete ="if(args&amp;&amp; args.showDialog){dialog1.show()} else {alert('bean没有让我打开对话框')}" (4认同)

小智 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)