我有一个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值?
答案 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();}"/>
我知道这不是一种奇特的方式,但它有效...