freemaker应用笔记

项目中需要用到不同分类的数据使用不同的模板,需要在模板中动态显示数据。
一提到“模板”,第一个反应当然是使用freemarker,现把自己的使用情况记录下来以备参考。

1.Action代码
   public void getHtmlById(){
    Map<String, Object> params = new HashMap<String, Object>();
    params.put( "newsList", getNews());
    params.put( "categoryId", categoryId);
    params.put( "categoryName", categoryName);
                Configuration cfg = new Configuration();
                cfg.setServletContextForTemplateLoading(ServletActionContext.getServletContext(), "WEB-INF/templates");
     try {
      Template t = cfg.getTemplate(categoryId+ ".ftl");
      HttpServletResponse response = ServletActionContext.getResponse();
      response.setContentType( "text/html;charset=UTF-8");
      Writer out = response.getWriter();
      t.process(params, out);
    } catch (IOException e1) {
      logger.error( "解析模板错误,IOException!",e1);
    } catch (TemplateException e1) {
      logger.error( "解析模板错误,TemplateException!",e1);
    }
  }

    /**
     * 取20条信息记录
     * @return
     */
    private List<News> getNews(){
        PageRequest<News> pageRequest = new PageRequest<News>();
        pageRequest.setPageNo(1);
        pageRequest.setPageSize(20);
        News news = new News();
        news.setCategoryId(categoryId.intValue());
        pageRequest.setSearchDo(news);
        return newsManager.getPage(pageRequest).getResult();
    }

2.xx.ftl模板代码

< div class ="bar" >${categoryName} </div>
< ul >
< #list newsList as column >
   < li >${column.title} < span class ="rec" > < a href ="javascript:void(0)" onclick ="setTop(${column.id?c},false)" >推荐 </a> </span> </li>
   < #if column_index = 9 > < #break > </#if>
</#list>
</ul>

你可能感兴趣的:(java,freemarker,模板,职场,休闲)