文档章节

jfinal中使用freemarker模版

SPPan
 SPPan
发布于 2017/06/02 10:46
字数 649
阅读 54
收藏 0

jfinal3.0开始,提供了自己的模版引擎,但是有一些比较老的项目,要升级服务端程序容易,要是把所有的前台模版页面全部重新换成jfinal template engine 来实现,确实是个非常大的工程,所以可能还是免不了要使用经典的freemarker。所以,本文将来说明一下,如果再jfinal3.X中一步步的加入集成freemarker,并且使用自定义指令。

为什么采用freemarker? 优点还是有很多的,例如

  1. 模板技术,不依附于语言和框架,前端和后端解耦,便于分工协作,更好的协同。 2.页面相应速度快,代码重复利用率高。
  2. 前端非常的灵活,采用自定义标签可以在不更改后端的基础上很容易的构造前端逻辑,可适应多变的网站。等等等。

废话不多说,开始吧

一、集成freemarker。

首先,需要做的肯定是加入freemarker的jar包了,以maven为例。

<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
	<version>2.3.16</version>
</dependency>

然后就简单了,由于jfinal3.x默认有自己的模版引擎,所以就只是需要先把模版引擎指定为freemarker就好了,在Config的configConstant中,配置视图类型。

me.setViewType(ViewType.FREE_MARKER);

这样就很简单的就完成了freemarker和jfinal的集成。

二、自定义指令标签

1、首先需要写一个标签的实现类了。这个类需要实现一个TemplateDirectiveModel的接口。例如下面:

/**
 * 轮播banner获取标签
 * 可以通过<@cms.bannerList;blogroll></@cms.bannerList>来获取轮播列表信息 <br>
 * blogroll 中包含了id、articleId、articleTitle、articleImg、order
 * @author SPPan
 *
 */
public class BannerDirective implements TemplateDirectiveModel {
	@Override
	public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
			throws TemplateException, IOException {
		//此处为业务处理的数据
		List<Record> list = BannerService.me.indexFindAllBannerArticle();
		loopVars[0] = ObjectWrapper.DEFAULT_WRAPPER.wrap(list);
		if (body != null) {  
            body.render(env.getOut());  
        } 
	}
}

2、在需要使用这个标签的action中将标签注入、或者也可以在拦截器中实现。

setAttr("cms", new CmsDirective());

或者如果觉得这么设置麻烦,也可以直接把标签设置为freemarker全局共享,在config类的configConstant方法中使用如下代码即可。

FreeMarkerRender.getConfiguration().setSharedVariable("cms", new CmsDirective());

定义一个类来对所有的指令统一管理(这一步不是必须的,如果不使用统一管理,可以直接把new出来的指令实现对象注入,一样的可以进行使用。)

public class CmsDirective extends SimpleHash{
	/**
	 * 
	 */
	private static final long serialVersionUID = 7883749740013754392L;
	
	public CmsDirective(){
		put("bannerList", new BannerDirective());
	}
 }

3、在模版文件中使用自定义的标签

<@cms.bannerList;blogroll>
    <#list blogroll as item>
    </#list>
</@cms.bannerList>

© 著作权归作者所有

共有 人打赏支持
SPPan
粉丝 10
博文 29
码字总数 15103
作品 0
成都
程序员
Jfinal中FreemarkerRender小改进

在与朋友讨论中,说到jf中的FreemarkerRender不能读到jar中的文件,查看jf源码是没有加入Freemarker的ClassTemplateLoder.读不到jar包中的静态文件,尝试着自己改进了下这个render。 把jfina...

kyle1970
2013/01/03
0
5
使用Freesql简单地实现多条件查询

在实际应用中我们经常会遇到多条件查询的情景,以往的解决方案是在java中对各个参数值进行非空之类的判断,再进行sql及参数的拼凑。 其实还有更简单的解决方法的--用Freemarker。Freemarker可...

jse7en
2014/03/23
0
4
JFinal使用Freemarker作为展示层中的国际化配置使用

最近在使用jfinal,如果使用jsp作为展现层的文件,使用jfinal的国际化很简单,直接 I18N.getText("key")就可以了,如果使用freemarker就没这么简单了,不能所有的国际化文字都通过 Controll...

hulang
2014/04/27
0
0
JAVA 极速WEB+ORM框架 - JFinal

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、p...

JFinal
2012/03/18
0
496
jfinal下超爽的freemarker自定义标签,web开发的利器

为什么采用freemarker? 1、模板技术,不依附于语言和框架,前端和后端解耦,便于分工协作,更好的协同。 2、页面相应速度快 3、前端非常的灵活,采用自定义标签可以在不更改后端的基础上很容...

菜根乱谭
2012/11/27
0
16

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day60-20180818-流利阅读笔记-待学习

钉钉:工作的归工作,生活的…也归工作? 毛西 2018-08-18 1.今日导读 你用过“钉钉”么?被公司要求使用钉钉的感受是如何的呢?这款阿里巴巴旗下的移动办公社交平台在弯道超车微信、为许多企...

aibinxiao
50分钟前
8
0
Kubernetes的HTTPS和证书问题,汇总

通过Kubernetes建立服务网站,需要干的事情和HTTPS和证书问题,汇总如下: 建立Nginx服务器 搞服务器第一步,Ubuntu 18.04设置静态IP 安装Nginx服务。 Kubernetes的deployment使用 创建服务,...

openthings
今天
2
0
php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
今天
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
今天
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部