如何在javascript(oncomplete)中使用动作返回值?

时间:2014-01-16 12:57:16

标签: java javascript jsf-2 primefaces

我有一个commandButton,我想在完成后调用一个javascript函数。问题是我必须在oncomplete函数中使用action方法的返回。我假设我可以使用这样的属性:

<p:commandButton value="پیش نمایش گزارش" ajax="true" id="showReport" update=":panel 
showReport" action="#{reportUIBean.showReport()}" oncomplete=
"if(#{reportUIBean.successful}){dialog.show();}" process="@this" />

问题是虽然更新在oncomplete函数之前运行但它无法正常工作。我认为这是因为该函数已经在命令堆栈中。 我通过使用onsuccess尝试了另一种方法但总是调用该函数,因为我必须捕获异常。有没有办法调用javascript函数并在其中使用JSF值?

2 个答案:

答案 0 :(得分:4)

您可以在动作中使用Primefaces RequestContext添加回调参数....

Bean

 public void showReport() {
     // generate report
     RequestContext context = RequestContext.getCurrentInstance();  
     context.addCallbackParam("successful", true);    //if okay to show dialog
 }  

按钮

<p:commandButton value="پیش نمایش گزارش" 
                id="showReport" 
                update=":panel showReport"
                action="#{reportUIBean.showReport()}" 
                oncomplete="handleComplete(xhr, status, args)"
                process="@this" />

JS

function handleComplete(xhr, status, args) {  
   if(args.successful) {  
       dialog.show();
    }      
} 

希望这有帮助。

答案 1 :(得分:0)

这解决了我的问题:

<p:commandButton value="پیش نمایش گزارش" ajax="true" id="showReport"
    update=":panel show" action="#{reportUIBean.showReport()}" 
    oncomplete="document.getElementById('reportOptions:show').click();"
    process="@this" />

<p:commandButton style="display: none" id="show"
    onclick="if(#{reportUIBean.successful}) {dialog.show();}"/>

我知道这不是一种奇特的方式,但它有效...