文档章节

jfinal中使用freemarker模版

SPPan
 SPPan
发布于 2017/06/02 10:46
字数 649
阅读 77
收藏 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 中Freemarker 使用Import 标签疑问

@jfinal 我现在有个项目页面以前用到freemarker 然后我移植到Jfinl框架中,Freemarker中解析有Import标签页面出错。这应该非Jfinal问题,我怀疑Jfinal引入Freemarker时应该需要设置参数,貌似...

郭恩洲_OSC博客
2014/08/28
1K
3
在非controller中应该如使用CaptchaRender?

@JFinal 你好,想跟你请教个问题:项目使用JFINAL 集成shiro,验证码使用了CaptchaRender获取,但是在shiro的shirodbrealm中无法使用CaptchaRender validate方法验证。像这种情况,在非contr...

shooter118
2013/07/06
302
2
jfinal 如何指定freemarker根路径呢?

@JFinal 你好,想跟你请教个问题: jfinal 如何指定freemarker根路径呢? 前几天学习beetl,其中beetl.properties配置文件可以配置模块文件的根路径,例如: RESOURCE.root=/pages 这几天学习...

jelly_oy
2014/12/18
730
2
jfinal 项目使用freemarker 页面map集合迭代问题

jfinal 项目使用freemarker 页面map集合迭代问题 控制台一直报: 网上说命名和freemarker命名冲突,替换了好几种不存在这种情况,折腾有几天了 麻烦大牛给看看 页面freemarker迭代情况: @j...

郭恩洲_OSC博客
2013/08/30
2.7K
4
JFinal中freemarker如何得到I18N信息?

在JFinal demo中做I18N的实验, 在BlogController中I18N.getText("welcome.msg");已经能得到welcome.msg信息了, 请问怎么在freemarker模版中得到"welcome.msg"信息。还有是在JFinal中如何实...

尚能饭否
2012/12/23
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部