文档章节

freeMarker使用心得(一)

弧线之内
 弧线之内
发布于 2015/11/24 14:15
字数 601
阅读 41
收藏 0
点赞 0
评论 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
博文 17
码字总数 18278
作品 0
厦门
程序员
FreeMarker | 取值篇

第一部分:Spring Boot 集成 FreeMarker 1、 需要这些依赖 2、yml 我喜欢 yml,所以删掉 ,新建 3、配置 在 中添加如下配置 4、Controller - View 5、运行效果 第二部分:取值 1、学过 free...

Wenyi_Feng ⋅ 06/14 ⋅ 0

FreeMarker | 数据篇

变量及运算 1、变量定义和赋值 2、判空 防止为空 FreeMarker 不区分单双引号 逻辑判空 对象、集合 1、对象 2、集合 3、Map 可以根据key直接取值可以获取所有key然后遍历也可以直接遍历值 资料...

Wenyi_Feng ⋅ 06/15 ⋅ 0

SpringBoot笔记(五)模板引擎thymeleaf和freemarker

SpringBoot本来不应该关注这块,但是既然都学了,就看看吧 SpringBoot属于前后端分离的微服务框架,默认的模板引擎是thymeleaf,虽然也能支持JSP,但是比较麻烦,另外freemarker也是SpringB...

世外大帝 ⋅ 04/25 ⋅ 0

SpringBoot集成FreeMarker

给大家简单介绍一下springboot 集成FreeMarker 过程很简单,5分钟即可。 首先在项目中增添依赖spring-boot-starter-freemarker pom文件代码如下: 然后创建controller,代码如下: applicat...

dalaoyang ⋅ 03/14 ⋅ 0

SpringBoot集成Thymeleaf

上一篇给大家介绍了springboot整合freemarker,这一片来继续为大家介绍一种模板thymeleaf。 首先在项目中增添thymeleaf依赖spring-boot-starter-thymeleaf 同时为了解决html严格校验报错的问...

dalaoyang ⋅ 03/15 ⋅ 0

Freemarker介绍、使用并与Spring整合

一、什么是Freemarker 1.1 介绍 是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而...

yuanlaijike ⋅ 04/16 ⋅ 0

MiniDao 1.6.4 版本发布,轻量级 Java 持久化框架

MiniDao1.6.4 版本发布,MiniDao是轻量级Java持久化框架,也是Hibernate项目辅助利器。 MiniDao 简介及特征 MiniDao 是一款超轻量的JAVA持久层框架,具备Mybatis一样的SQL能力: 支持SQL分离...

Jeecg ⋅ 06/04 ⋅ 0

SpringBoot使用Thymeleaf

@作者博客 JSP、Velocity、Freemarker、Thymeleaf SpringBoot推荐的Thymeleaf; 语法更简单,功能更强大; 1、引入thymeleaf; 2、Thymeleaf使用 只要我们把HTML页面放在classpath:/template...

mkStone ⋅ 04/10 ⋅ 0

NutzBoot Maven Plugin v2.1.9,支持 JDK10

跟随 nutzboot 主版本, 升级一下。 变化: fix: war打包下freemarker启动失败的bug add: 支持scp上传到服务器 add: 支持JDK10 这是 NutzBoot 的 Maven 插件。 在 build-plugins 添加本 plugin...

wendal ⋅ 06/01 ⋅ 0

freemarker中日期显示

在java中常用Timestamp表示时间。如果在freemarker页面中直接使用${myTimestamp},会以yyyy-MM-dd HH:mm:ss的形式显示时间。有时这不是我们想要的。可以用以下方式定制化显示格式。 ${myTime...

第四单元 ⋅ 05/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 21分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致die ⋅ 33分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部