2013-04-26 3 views
0

에 CSV를 구축 기본적으로 제가하고 싶은 것은 이것이다. 필자는 JSF를 사용하면서 FileWriter를 사용할 수 없지만 외부 컨텍스트에서 출력 스트림을 가져 와서 출력 스트림 (아래 코드)을 사용하여 버퍼링 된 작성자를 작성하여 비슷한 작업을 시도했습니다. 끝까지 완전히 실행되지만 대화 상자가 나타나지 않습니다. JSF 2 (MyFaces) 및 RichFaces 4.3을 사용하고 있는데 구성 요소를 사용하여이를 수행하는 더 좋은 방법이 있다면 알려주십시오.동적으로 JSF 2

externalContext.responseReset(); 
externalContext.setResponseHeader("Content-Disposition", "attachment; filename=test.csv"); 
externalContext.setResponseContentType("text/csv"); 

try { 
    OutputStream csvOut = externalContext.getResponseOutputStream();  
    BufferedWriter csvWriter = new BufferedWriter(new OutputStreamWriter(csvOut, "UTF-8")); 

    csvWriter.append("data,data,data,data"); 

    csvWriter.flush(); 
    csvWriter.close(); 
    csvOut.close(); 

    facesContext.responseComplete(); 
}catch(Exception ex){ 
    System.out.println(ex.toString()); 
} 

어떤 제안 사항이 도움이 될 것입니다, 지금 당분간이 고생했습니다.

+1

BalusC의 킥오프 예를 시도해보십시오. http://stackoverflow.com/questions/2914025/forcing-a-save-as-dialogue-from-any-web-browser-from-jsf-application – uzvar

+0

의견을 보내 주셔서 감사합니다. 어쨌든 그 정확한 해결책은 효과가 없었지만, 올바른 방향으로 나를 도왔습니다. 어떤 식 으로든 코멘트/+ 담당자를 upvote하는 방법을 모르지만 감사합니다. 내가 무엇을 게시합니까? 내가 허락하자마자 대답했다. – Vinc

답변

1

우선 나를 감사하는 uzvar 덕분에 Forcing a save as dialogue from any web browser from JSF application 내게 도움이되는 것은 내 작업에 도움이됩니다.

기본적으로 내가 한 것은 OutputStream 대신 externalContext.getResponseOutputStream(); BufferedOutputStream을 선언했습니다. 그 결과는 다음과 같습니다.

BufferedOutputStream csvOut = new BufferedOutputStream(externalContext.getResponseOutputStream()); 

나머지 코드는 그대로 유지됩니다.

더 좋은 방법이 있다면 대답/의견을 게시하십시오.