0

JSF(IceFaces 1.8.2)のWebサイトがあります。次の機能が必要です。特定のJSFページが表示されたら、そのHTMLコードをデータベースに保存したいと思います。サーブレットフィルターを使用してコードをキャプチャしようとしましたが(SUN Webbageや多くのチュートリアルで記述されているHttpResponseWrapperオブジェクトを使用)、応答は常に空でした。誰かが私を助けることができますか?

これがdoFilterです:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {  

    Wrapper responseWrapper = new Wrapper((HttpServletResponse)response);
    chain.doFilter(request, responseWrapper);
    //I just want the output on stdout at the moment...
    System.out.println(responseWrapper.toString());
    PrintWriter out = response.getWriter();
    out.write(responseWrapper.toString()); 
    }

そしてここにラッパーがあります:

public class Wrapper extends HttpServletResponseWrapper{
    private CharArrayWriter writer;
    public Wrapper(HttpServletResponse response){
        super(response);
        writer = new CharArrayWriter();
}

public PrintWriter getWriter(){
    return (new PrintWriter(writer));
}

public String toString(){
    return writer.toString();
}

public char[] toCharArray(){
    return (writer.toCharArray());
 }
}

そしてweb.xml:

<filter>
  <filter-name>MyFilter</filter-name>
  <filter-class>foo.myfilter</filter-class>
</filter> 
<filter-mapping>
  <filter-name>MyFilter</filter-name>
  <url-pattern>*.iface</url-pattern>
</filter-mapping>
4

1 に答える 1

1

response.getOutputStream()おそらく、JSF はリダイレクトを送信するか、または?を使用して応答を書き込みます。のすべてのメソッドにブレークポイントを設定して、HttpServletResponseWrapperJSF が呼び出すメソッドを見つけてください。

于 2012-08-18T22:33:24.190 に答える