【问题标题】:store html code of a JSF page automatically自动存储 JSF 页面的 html 代码
【发布时间】:2012-08-18 16:34:42
【问题描述】:

我有一个 JSF (IceFaces 1.8.2) 网站。我需要以下功能: 当显示特定的 JSF 页面时,我想将其 HTML 代码存储在数据库中。我尝试使用 Servlet 过滤器来捕获代码(使用 HttpResponseWrapper 对象,因为它写在 SUN 网页和许多教程中),但响应总是空的。有人可以帮帮我吗?

这里是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>

【问题讨论】:

  • 可能你的代码有bug,请贴出你的工作给你更好的指导。
  • 不要在 cmets 中发布代码。编辑您的问题并在那里添加代码。不用担心格式,任何人都可以编辑它,直到您了解 SO 的基础知识。

标签: java html jsf servlet-filters


【解决方案1】:

也许 JSF 发送重定向,或者使用 response.getOutputStream() 写入响应?尝试在HttpServletResponseWrapper 的所有方法中设置断点,以发现 JSF 调用了哪些方法。

【讨论】:

  • JSF 使用 getOutputStream。我必须从 ServletOutputStream 创建一个子类以使响应可读。谢谢
  • 也可以通过 ui:debug 标签激活 jsf 调试。它将页面输出的完整副本放入会话对象中。使用阶段侦听器或类似事件机制检索并推送到数据库。请注意,ui:debug 会使您的会话对象膨胀,因此我只建议将其用于低可用性或非生产产品中。
猜你喜欢
  • 2012-03-21
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多