jfinal中使用freemarker模版
博客专区 > SPPan 的博客 > 博客详情
jfinal中使用freemarker模版
SPPan 发表于6个月前
jfinal中使用freemarker模版
  • 发表于 6个月前
  • 阅读 22
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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>
标签: JFinal FreeMarker
共有 人打赏支持
粉丝 6
博文 30
码字总数 15436
×
SPPan
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: