文档章节

freeMarker使用心得(一)

弧线之内
 弧线之内
发布于 2015/11/24 14:15
字数 601
阅读 42
收藏 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在eclipse中的入门例子

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

oecp
2011/04/26
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 2.3.22 版本发布,Java 模板引擎

FreeMarker 2.3.22 版本发布,值得关注的特性: DefaultObjectWrapper 改进 (mostly on the field of Map and List wrapping), enabled by incompatible_improvements 2.3.22. 改进 Freemark......

CraneH
2015/06/09
2.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

vue-cli 3 分环境打包

在vue-cli3的项目中, npm run serve时会把process.env.NODE_ENV设置为‘development’; npm run build 时会把process.env.NODE_ENV设置为‘production’; 此时只要根据process.env.NODE_...

灰白发
4分钟前
0
0
集合初始化,泛型及相关操作

集合初始化通常进行分配容量,设置特定参数等相关工作,推荐在任何情况下,都需要显式地设定集合容量的初始大小。 ArrayList 使用无参构造时,默认大小为 10 ,也就是说在第一次add的时候,分...

Canaan_
13分钟前
1
0
Sping之项目中pofile的应用

工程中,我们必须要面对的一件事就是, 开发环境中使用的数据库连接地址等与生产上的不同, 如果上线, 那么我们是否还要手动修改这些地址么, 这样做有很多弊端, 不方便, 这时我们就可以使用spr...

克虏伯
21分钟前
0
0
Linux中安装MySQL

Linux中安装MySQL 一、准备工作 此处准备的操作系统位CentOS 7。 MySQL安装包: MySQL-server-5.6.29-1.linux_glibc2.5.x86_64.rpm MySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rpm 将准备......

星汉
25分钟前
0
0
深入理解Hadoop之HDFS架构

Hadoop分布式文件系统(HDFS)是一种分布式文件系统。它与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的差异是值得我们注意的: HDFS具有高度容错能力,旨在部署在低成...

架构师springboot
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部