我有一点问题,因为我需要下载一个文件(并且我只能使用h:commandButton)但我需要oncomplete函数(仅适用于a4j:commandButton)才能显示运行状态。 代码示例如下:
<h:commandButton
id="downloadReportButton"
action="#{reportingBean.createAndDonwloadFile()}"
/>
我已经尝试过像BalusC的回复中那样做:https://stackoverflow.com/a/31267418/1777424但问题是因为Ajax请求没有执行。
<h:commandButton
id="downloadReportButton"
action="#{reportingBean.createAndDonwloadFile()}"/>
<f:ajax onevent="oneventFunction" />
</h:commandLink>
function oneventFunction(data) {
if (data.status === "success") {
oncompleteFunction();
}
}
答案 0 :(得分:2)
我找到了解决这个问题的方法。 首先需要一个 a4j:commandButton 只是为了让点击按钮带有ajax请求。在这部分中,将创建文件。
<a4j:commandButton
id="createFileButton"
onclick="showLoading();"
action="#{reportingBean.createFile()}"
oncomplete="hideLoading(); #rich:element('downloadFileButton')}.click();"
/>
这个a4j:commandButton将在oncomplete上单击 downloadFileButton 按钮,该按钮将下载该文件。 然后有必要使用h:commandButton来下载已创建的文件。
<h:commandButton
id="downloadFileButton"
action="#{reportingBean.downloadFile()}"
style="display:none"
/>
此按钮将被隐藏( style =&#34; display:none&#34; ),因为只是为了触发文件的下载。