请教,使用free静态化时,如果模板没有include,则可以正确解析,但只要模板中有include,马上报内存溢出比如,template.process(root, writer);可以正常解析,但当模板前面加上<#include "/includes/header.ftl" />执行时,马上报错:java.lang.stackoverflowerror 请问该如何解决?

解决方案 »

  1.   

    Configuration cfg = new Configuration();
    cfg.setTemplateLoader(new StringTemplateLoader(cgisOutputTemplate.getOutCode()));
    cfg.setDefaultEncoding("UTF-8");
    Template template = cfg.getTemplate("");
    Map root = new HashMap();// 得到模板代码
    String outCode = cgisOutputTemplate.getOutCode();
    root.put("Request", request);
    root.put("Session", request.getSession());
    root.put("JspTaglibs", new TaglibFactory(request.getSession().getServletContext()));
    ServletContextHashModel servletContextHashModel = (ServletContextHashModel) request.getSession()
    .getServletContext().getAttribute(ATTR_APPLICATION_MODEL);
    root.put(FreeerServlet.KEY_APPLICATION, servletContextHashModel);
    root.put(FreeerServlet.KEY_REQUEST, new HttpRequestHashModel(request, response, cfg.getObjectWrapper()));StringWriter writer = new StringWriter();
    template.process(root, writer);
      

  2.   


    没看出什么错误难道是你include的页面太大了?不可能吧。一般不会出问题的。
    等大牛来回答吧
      

  3.   

    贴 /includes/header.ftl 还有所有它引用(递归)的模板
    贴完整代码怀疑模板引用里有循环引用
      

  4.   

    我试了include一个ftl或include一个action都不行,单独执行都没问题的,我再简化试试PS,我include的header.ftl,在我工程中其它所有地方使用正常的free,action的流程都都用到,都没问题,只在直接调用process才有问题
      

  5.   

    我把header.ftl简化到<script language="javascript">
    alert('f');
    </script>还是一样的错误