3

When I click the h:commandButton it execute the myBean.dowanlod() method, but it doesn't download any files. Here is my methods in the backing bean. No exceptions. Cursor gets busy and seems like waiting for a response. Are there any additional configurations for this kind of operations or is there any wrong with this code?

<h:commandButton value="download" action="#{myBean.download()}" /> 

@ManagedBean
@SessionScoped    
public class MyBean implements Serializable{
   //....

   public String download{

    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();

    String fileName = "test.txt";
    String filePath = "D:\\test.txt"; //externalContext.getRealPath("") + File.separator + fileName;
    File file = new File(filePath);

    externalContext.setResponseHeader("Content-Type", "text/plain");
    externalContext.setResponseHeader("Content-Length", String.valueOf(file.length()));
    externalContext.setResponseHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");


    InputStream input = null;
    OutputStream output = null;

    try {
        input = new FileInputStream(file);
        output = externalContext.getResponseOutputStream();
        IOUtils.copy(input, output);
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        IOUtils.closeQuietly(output);
        IOUtils.closeQuietly(input);
    }

    facesContext.responseComplete();
    return null;
  }

  //...
}
4

2 に答える 2

3

ICEfaces には、すべての標準 JSFを ajax 対応のコマンド ボタンに暗黙的に変換するという奇妙な「機能」があります。<h:commandButton>ただし、ajax を使用してファイルをダウンロードすることはできません。明示的にオフにする必要があります。をネストすることで、ボタンごとにそれを行うことができます<f:ajax disabled="true">

<h:commandButton value="download" action="#{myBean.download()}" />
    <f:ajax disabled="true"/>
</h:commandButton>

以下も参照してください。

于 2013-02-28T12:26:53.813 に答える
0

以前は<h:head>とを持っていました<ice:form>。このファイル ダウンロードは、これらの名前空間では機能しません。<head>使用して問題を<h:form>解決するだけです。私はJSFを学んでいるので、これについてはわかりません。どういうわけかそれは私のために働きます。そして、 BalusC のブログから、はるかに優れたファイル ダウンロード チュートリアルを見つけました。どなたか理由がわかる方、もしくは推測できる方がいらっしゃいましたら教えてください。

于 2013-02-28T09:44:41.933 に答える