h:commandButton 具有 oncomplete 功能并下载文件

h:commandButton with oncomplete function and download a file

我有一个小问题,因为我需要下载一个文件(为此我只能使用 h:commandButton)但我需要 oncomplete 函数(只适用于 a4j:commandButton)出现运行 状态。 代码示例是这样的:

 <h:commandButton
        id="downloadReportButton"
        action="#{reportingBean.createAndDonwloadFile()}"               
 />

我已经在 BalusC 的回复中尝试这样做了: 但问题是因为 Ajax 请求没有执行。

<h:commandButton
        id="downloadReportButton"
        action="#{reportingBean.createAndDonwloadFile()}"/>
        <f:ajax onevent="oneventFunction" />
 </h:commandLink>

function oneventFunction(data) {
    if (data.status === "success") {
        oncompleteFunction();
    }
}

我找到了解决这个问题的方法。 首先需要有一个 a4j:commandButton 才能让点击按钮带有 ajax 请求。在这部分将创建文件。

<a4j:commandButton
    id="createFileButton"
    onclick="showLoading();"
    action="#{reportingBean.createFile()}"
    oncomplete="hideLoading(); #rich:element('downloadFileButton')}.click();"
/>

此 a4j:commandButton 将在完成后单击 downloadFileButton 按钮下载文件。 然后需要有一个h:commandButton来下载已经创建的文件。

<h:commandButton
    id="downloadFileButton"
    action="#{reportingBean.downloadFile()}"
    style="display:none"
/>

这个按钮将被隐藏 (style="display:none") 因为它只是为了触发文件的下载。