文档章节

freeMarker使用心得(一)

弧线之内
 弧线之内
发布于 2015/11/24 14:15
字数 601
阅读 41
收藏 0

  首先,曾经天真的以为freemarker跟jstl和el一样,只是显示数据用的标签。但是实际上freemarker数据jsp级别的,可以用来生成静态页面。

  先来看看freemarker在页面上是如何被调用的。

   

public class FreeMarkHander {

   private Configuration cfg; // 模版配置对象

   public void init(String templatePath) throws Exception {
      // 初始化FreeMarker配置
      // 创建一个Configuration实例
      cfg = new Configuration(Configuration.VERSION_2_3_21);
      // 设置FreeMarker的模版文件夹位置   
      //String templatePath = request.getSession().getServletContext().getRealPath("/template");
      cfg.setDirectoryForTemplateLoading(new File(templatePath));
      // 设置异常处理器
      cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
      cfg.setDefaultEncoding("utf-8");
   }

   public String process(Map<String, Object>  map, String ftl) throws Exception {
      String rtn = "";
      Template tpl = cfg.getTemplate(ftl);
      ByteOutputStream stream = new ByteOutputStream();
      Writer out = new OutputStreamWriter(stream);
      tpl.process(map, out);
      out.flush();
      rtn = stream.toString();
      return rtn;

   }
   
   /****
    * 数据渲染html片段
    * @param map            填充数据
    * @param templatePath   模板路径
    * @param ftlName        模板名称       
    * @return html片段字符串
    * @throws Exception
    */
   public static String createPage(Map<String, Object>  map,String templatePath,String ftlName)throws Exception {
      String html = "";
      FreeMarkHander fh = new FreeMarkHander();
      fh.init(templatePath);
      html = fh.process(map,ftlName);
      return html;
   }

   第一个方法,初始化模板的配置,包括模板所在文件夹的位置,规定编码方式等等。

   最下面createPage方法是在jsp上调用的,传入的map即为传入的数据集合,templatePath是模板文件夹在项目的绝对路径,ftlName则是具体模板的名称。中间调用的process自己体会了(没有异常抓取等等,凑合用)


  模板的所在的文件夹可以自己设立,本项目中在WebRoot下的template中。

  模板的具体长相:

<#if newList?size gt 0>
<div class="list">
    <ul>
<#list newList as news>
    <li id="${news.news_id}" name="news_list"><a href="${news.news_id?default('')}" target="_blank" title="${news.title?default('')}"><i class="icon icon-arrow"></i><span>${news.title?default('')}</span></a></li>
</#list>
    </ul>
</div>
<div class="more"><a id="the_more_news">更多 <i class="icon icon-arrow-double"> </i></a></div>
<#else >
<div class="list empty">
    <div class="page-message-empty">
        <div class="mascot cry"><i class="icon icon-none-cry"></i>
            <div class="message">没有相关资讯</div>
        </div>
    </div>
</div>
</#if>

  在jsp中的写法:

NewsService newService = new NewsServiceImpl();
List<News> newList = newService.newsList(org_id, dataSource);//获取需要渲染的数据
map.put("newList",newList);//装进map
String str = FreeMarkHander.createPage(map, templatePath, "news.ftl");//将数据扔进模板渲染

  最后,在页面上需要的位置

<%=str%>

就OK了。

  

  ps:freemarker上无法写java代码,可以实现真正的v_c层的分离。

© 著作权归作者所有

共有 人打赏支持
弧线之内
粉丝 2
博文 20
码字总数 18278
作品 0
厦门
程序员
freemaker开发学习《一》

 FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.FreeMarker可以提供昜好的团队协作,对于界面开发人...

xiaml
2014/04/25
0
0
细数FreeMarker的优缺点

一、 FreeMarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。 所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容...

oecp
2011/04/22
0
3
FreeMarker在eclipse中的入门例子

刚接触FreeMarker时,只是简单的了解FreeMarker的一些概念及工作原理,至于如何使用FreeMarker还不是非常清楚。随着学习的深入,才渐渐对FreeMarker有了更深入的理解。本文将从基础应用着手,...

oecp
2011/05/16
0
0
FreeMarker在eclipse中的入门例子

今天海浪为大家分享一个FreeMarker在eclipse中的入门例子。 一、在eclipse中创建FreeMarker模板 在FreeMarker中模板的概念就是:包含一些由${…}包围的特殊代码的文件。这些特殊代码是FreeM...

oecp
2011/04/26
0
0
Struts2与Freemarker的配置方法(附源码和插件)

Freemarker是模板引擎,也可以说是一种表现层的框架,它有自己的模板指令,开发者如果不熟悉这些语法,很难进行表现层的开发。Struts2框架技术对Freemarker做了很好的支持,开发人员只要熟悉...

oecp
2011/04/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Univalsal_ImageLoader源码结构与创建者模式 初步小结

最近在回归看Univalsal_ImageLoader源码,本想自己也实现试试写一个,看源码是为了学习看能否使用,助于自己可以写出有自己逻辑结构的代码。 首先我们初始化ImageLoader的配置初始化的时候,...

DannyCoder
52分钟前
0
0
计算卷积神经网络浮点数运算量

前言 本文主要是介绍了,给定一个卷积神经网络的配置之后,如何大概估算它的浮点数运算量。 相关代码:CalFlops,基于MXNet框架的 Scala 接口实现的一个计算MXNet网络模型运算量的demo。 正文...

Ldpe2G
今天
3
0
Sql语言与MySql数据库

1. 数据库简介 1. 数据库,就是存储数据的仓库,只能通过sql语言来访问,数据库也是一个文件系统。通常,MySQL、Oracle等数据库,也被称为关系型数据库,其保存的不仅仅只是数据,还包括数据...

江左煤郎
今天
3
0
IDEA 取消自动import .*

打开设置 > Editor > Code Style > Java > Scheme Default > Imports ① 将 Class count to use import with "*" 改为 99 (导入同一个包的类超过这个数值自动变为 * ) ② 将 Names count ......

乔老哥
今天
4
0
PostGIS学习笔记(开篇)

PostGIS事实上算是笔者开始写博客的第一篇内容。而事实上那篇博文的内容并不丰富,笔者对PostGIS的了解仍然不多,然而17年在OSGeo课程学习时对PostGIS又有了进一步了解,并逐步发现它的强大。...

胖胖雕
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部