2008-11-13 3 views
2

어떻게 정보를 tapestry5의 출력 스트림에 넣을 수 있습니까?어떻게 tapestry5의 출력 스트림에 정보를 넣을 수 있습니까?

사용자가 입력 할 때 페이지가 필요합니다. 저장하거나 출력 스트림 정보가있는 파일을 여는 대화 상자를 엽니 다.

공용 클래스 인덱스 {

@Inject 
private RequestGlobals requestGlobals; 

@OnEvent("activate") 
public void onActivate() { 
    try { 
     HttpServletResponse response = requestGlobals.getHTTPServletResponse(); 
     response.setContentType("text/txt"); 
     PrintWriter out = response.getWriter(); 
     out.println("hellooooooo"); 
     out.flush(); 
    } catch (IOException ex) { 
     Logger.getLogger(Index.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

}

나는 결과는 "helloooooooo"하지만 것을 희망

("helloooooooo"+ 내 HTML 원시에게 :

나는 다음 코드를 작성 페이지)

답변

1

당신은 다소 불편하고 비효율적 일 수 StreamResponse를 사용하여, 대형 응답 스트림을 처리하는 경우 (때문에 InputStream을 반환해야합니다.) OutputStream에 직접 응답하는 것이 더 낫습니다.

다행히 Tapestry Wiki에는 정확히이 문제를 해결할 수있는 페이지가 있습니다 : Tapestry5: How To Create A Component Event Result Processor.

+0

이 솔루션은 파일을 클라이언트에 보내기 전에 서버 측에 파일을 쓰지 않으려면 가장 좋습니다. 그러나 Tapestry 예제의 해결책은 수정이 필요합니다 :'OutputStream'의 클로저는'finally' 블록에서 이루어져야합니다. 'IOUtils.closeQuietly (out);'(아파치에서)를 사용하여 try ... catch가 필요없이'OutputStream'을 닫을 수 있습니다. – vdubus

+0

'finally'블록에서 수행됩니다. 사실, 그것은 두 번 수행됩니다 :'try' 블록과'finally' 블록 (단지 블록만으로 충분합니다). –

관련 문제