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

时间:2017-11-14 11:26:32

标签: ajax jsf jsf-2 commandbutton

我有一点问题,因为我需要下载一个文件(并且我只能使用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();
    }
}

1 个答案:

答案 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; ),因为只是为了触发文件的下载。