文档章节

jfinal中使用freemarker模版

SPPan
 SPPan
发布于 2017/06/02 10:46
字数 649
阅读 64
收藏 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 源码导读第四天(3) initRender

1.接上面的文章,initRender(); private void initRender() {RenderFactory renderFactory = RenderFactory.me();renderFactory.init(constants, servletContext);} 2.renderFactory.init(con......

skyim
2013/06/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

LSM-Tree 大数据索引技术

一、LSM-Tree概述 核心思想就是放弃部分读能力,换取写入能力的最大化。LSM-Tree ,这个概念就是结构化合并树(Log-Structured Merge Tree)的意思,它的核心思路其实非常简单,就是假定内存...

PeakFang-BOK
13分钟前
0
0
vue.js响应式原理解析与实现

从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染。之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新...

peakedness丶
19分钟前
0
0
Weblogic补丁升级操作步骤

linux平台: weblogic1036 1:停止weblogic服务 2:打FMJJ补丁 a:获取weblogic_home目录并执行命令:export weblogic_home="/weblogic/wls1036_x64",(此目录一般为目录“user_projects”上...

fang_faye
32分钟前
0
0
04-《Apache Tomcat 9 User Guide》之部署项目

1.Introduction Deployment is the term used for the process of installing a web application (either a 3rd party WAR or your own custom web application) into the Tomcat server. 部......

飞鱼说编程
32分钟前
0
0
一位十年的老码农他眼中的区块链

大家可能已经听说过比特币、莱特币、以太币等等,以及它们作为一种新货币在市场上的潜力。 有趣的是,很多投资比特币的人也提到了区块链之类的东西。 显然,这项技术是比特币等其他东西的"基...

小刀爱编程
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部