-2

I want to save to a DB the HTML generated by an outcome .

I've search for it but I'm lost, I don't know how to start :S.

Does somebody know a way to capture that HTML?

Thx.

podrick
  • 1
  • 2
  • Nothing, I'm still searching, I don't know anything about how to make it. – podrick Oct 02 '14 at 11:15
  • I've found this post http://stackoverflow.com/questions/3323089/capture-generated-html-output-of-jsf-page but it don't work for me because I can't use URLs – podrick Oct 02 '14 at 11:22

1 Answers1

1

I think that you can use ServletFilter,HttpServletResponse wrapper and PrintWriter wrapper.

1.create java.io.Printwriter subclass

public class PrintWriterWrapper extends PrintWriter {
    public PrintWriterWrapper(Writer out) {
        super(out);
    }
    @Override
    public void write(int c) {
        super.write(c);
        char ch = (char)c;
        System.out.println(ch); //<-please change to use DB. and others too.
    }
    @Override
    public void write(char[] buf, int off, int len) {
        super.write(buf, off, len);
        String str = new String(buf, off, len);
        System.out.println(str);
    }
    @Override
    public void write(String s, int off, int len) {
        super.write(s, off, len);
        System.out.println(s.substring(off, off+len));
    }
}

Please override other methods, if you need.

2.create HttpServletResponse wrapper class

public class MyResponseWrapper extends HttpServletResponseWrapper {
    public MyResponseWrapper(HttpServletResponse response) {
        super(response);
    }

    @Override
    public PrintWriter getWriter() throws IOException {
        PrintWriter writer = super.getWriter();
        PrintWriterWrapper wrapper = new PrintWriterWrapper(writer);
        return wrapper;
    }
}

3.create ServletFilter and use wrapper

public class MyFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) throws IOException, ServletException {
        MyResponseWrapper wrapper = new MyResponseWrapper((HttpServletResponse)res);
        chain.doFilter(req, wrapper);
    }
}

4.add filter setting to web.xml

 <filter>
     <filter-name>MyFilter</filter-name>
     <filter-class>hoge.MyFilter</filter-class>
 </filter>
 <filter-mapping>
     <filter-name>MyFilter</filter-name>
     <url-pattern>/faces/*</url-pattern>
 </filter-mapping>
kentkom
  • 26
  • 1