2013-08-20 1 views
0

스프링 포틀릿 JSP, 아약스 요청을 작성하고 컨트롤러에서 jsp 페이지를 가져 와서 pdf 출력을 전달하고 생성 할 수 있습니다.스프링 포틀릿이 jsp 응답을 문자열로받습니다.

그러나 문제는 임의의 문자열 데이터를 얻을하지 않았다하지만 HTML 내용이 코드에서

@Controller("exportSummaryController") 
@RequestMapping(value = "VIEW") 
public class ExportSummaryController implements PortletConfigAware { 

    @ResourceMapping("exportAccRequest") 
    public void accountRollupAction(@RequestParam("accNum") String accNum, 
     @RequestParam("sourceId") String sourceId, @RequestParam("serviceId") String serviceId, 
     @RequestParam("summaryExport") String strExport, ResourceRequest request, ResourceResponse response) throws Exception { 

     //processing data 

     ResourceResponseWrapper responseWrapper = new ResourceResponseWrapper(response) { 
      private final StringWriter sw = new StringWriter(); 

      @Override 
      public PrintWriter getWriter() throws IOException { 
       return new PrintWriter(sw); 
      } 

      @Override 
    public OutputStream getPortletOutputStream() throws IOException { 
       return(new StringOutputStream(sw)); 
      } 
      @Override 
      public String toString() { 
       return sw.toString(); 
      } 

     }; 

     portletConfig.getPortletContext().getRequestDispatcher("/WEB-INF/jsp/account_summary.jsp").include(request, responseWrapper); 
     String content = responseWrapper.toString(); 
     System.out.println("Output : " + content); // here i found empty output on command line but output is returned to jsp page. 
    }  
} 

public class StringOutputStream extends OutputStream { 
     private StringWriter stringWriter; 

     public StringOutputStream(StringWriter stringWriter) { 
      this.stringWriter = stringWriter; 
     } 

     public void write(int c) { 
      stringWriter.write(c); 
     } 
    } 
+0

내가 코드를 업데이트하지만 아직도 운이 출력은 여전히 ​​부모 응답에 가서 내가 디버깅 할 때 코드 getwritter가 호출되지 않는 사촌없는 몇 가지가있다. –

답변

0

출력이 하나의 OutputStream에 의해 cosumed되는 때라도로 코드를 확인하시기 바랍니다 JSP 페이지에 반환됩니다.

이 시도

,

ResourceResponseWrapper responseWrapper = new ResourceResponseWrapper(response) { 
     private final StringWriter sw = new StringWriter(); 

     @Override 
     public PrintWriter getWriter() throws IOException { 
      return new PrintWriter(sw){ 

       @Override 
       public void write(String s, int off, int len) 
       { 
        try 
        { sw.write(s, off, len); 
         response.getWriter().write(s, off, len); 
        } 
        catch (IOException e) 
        { 
         e.printStackTrace(); 
        } 
       } 
      }; 
     } 


     @Override 
     public String toString() { 
      return sw.toString(); 
     } 

    }; 
+0

나는 시도했지만 행운은 여전히 ​​빈 문자열을 반환합니다. –

+0

위의 코드에서'getPortletOutputStream()'을 재정의 해보십시오. 왜 내가 Liferay/Tomcat 서버에서 나를 위해 완벽하게 작동하는지 당신을 위해 작동하지 않습니다. – Niranjan

+0

나는 getPortletOutputStream을 무시하려고했지만 왜 작동하지 않는지는 알 수 없습니다. –

관련 문제