从JSF下载文件并提供呈现的响应

时间:2011-09-14 19:38:05

标签: jsf-2

我有一些动态生成的文件,我希望我的JSF 2.0应用程序可以为用户下载。我已经能够使用解决方案中的代码来实现这一点:

Forcing a save as dialogue from any web browser from JSF application

和页面上表格中的命令按钮

除了一个故障之外,它的工作正常。我希望能够在初始页面上向用户呈现一条消息,告诉他们正在处理他们的文件并请等待。显然,responseComplete调用会阻止这种情况发生。有没有办法重新呈现提交页面并从同一个按钮发回文件?

2 个答案:

答案 0 :(得分:2)

不,你不能。每个请求只能发送一个响应。最好的办法是使用JavaScript显示最初隐藏的div或在onclick期间包含消息的内容。但是你会遇到一个问题,即下载完成后你无法隐藏它。

另一种方法是将文件存储在临时磁盘上并返回一个完整的JSF响应,其中显示一个下载链接,该链接通过独立的servlet从临时磁盘返回文件。

答案 1 :(得分:-1)

我认为你可以使用ajax来解决这个问题。从ajax操作调用创建文件的方法,并提供javascript回调来处理导航或显示图层或其他

  <script type="text/javascript">

      function processEvent(data) {
        if (data.status == "begin") {
            showWaitingLayer();
        } else if (data.status == "success") {
            hideWaitingLayer();
            showDownloadLink();
        }               
      }
  </script>

  <h:commandLink action="#{myBean.createDocument}">
    <f:ajax onevent="processEvent"/>
  </h:commandLink>