文档章节

jfinal中使用freemarker模版

SPPan
 SPPan
发布于 2017/06/02 10:46
字数 649
阅读 41
收藏 0
点赞 0
评论 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
成都
程序员
JAVA 极速WEB+ORM框架 - JFinal

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

JFinal ⋅ 2012/03/18 ⋅ 496

JFinal+freemarker的疑惑

我这边有一个项目,用了JFinal3.3 + freemarker。 做优化时发现一个现象,已经做了简单的Demo实例: Controller的方法中: FTL: 页面输出: key: getClass key: getOrDefault key: compute...

云淡风轻0415 ⋅ 05/03 ⋅ 0

Java 模板引擎 Beetl 2.8.0 发布,增加根对象支持

Java 模板引擎 Beetl 2.8.0 发布了,改进内容包括: #348 beetl 默认配置DefaultTemplateEngine #347 增加根对象支持 #346 允许设置全局 ClassLoader #345 支持struts2.5, 由于struts升级不...

闲大赋 ⋅ 04/23 ⋅ 0

JFinal 3.4 发布,将极速贯彻到 UI 层

jfinal 的终极目标是全面实现软件开发整个过程的极速开发,极大提升开发效率,极大降低学习成本,极大提升开发体验 jfinal 诞生头五年,已实现 WEB + ORM + AOP 层面的极速开发,赢得了大量开...

JFinal ⋅ 04/28 ⋅ 129

FreeMarker | 取值篇

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

Wenyi_Feng ⋅ 06/14 ⋅ 0

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

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

世外大帝 ⋅ 04/25 ⋅ 0

Jboot v1.4.9 发布,核心 JFinal 升级到 3.4 最新版本

Jboot 是一个基于 JFinal 和 Undertow 开发的微服务框架。提供了 AOP、RPC、分布式缓存、限流、降级、熔断、统一配置中心、Opentracing 数据追踪、metrics 数据监控、分布式 session、代码生...

理工男海哥 ⋅ 05/03 ⋅ 0

kiplinglee/jfinal-ioc-plugin

jfinal-ioc-plugin JFinal 依赖注入插件 1.在JFinalConfig文件中配置IOC插件 @Overridepublic void configConstant(Constants me) { // 创建controller实现依赖注入me.setControllerFactory......

kiplinglee ⋅ 04/13 ⋅ 0

JFinal如何使用JNDI连接数据库

想用JNDI的方式连接数据库,但是JFinal中用的是DruidPlugin和ActiveRecordPlugin,没有看到用DataSource的地方?请问JFinal支持JNDI连接方式吗?怎么具体实现?...

zqq3436 ⋅ 06/11 ⋅ 0

JFinal(1.6)在Validator里执行过getFile,在Controller里取不到文件

JFinal在Validator里执行过getFile之后Validator中是可以取到文件及有关信息,但是在Controller里取不到文件,是不是我的姿势不正确?@JFinal

车开源 ⋅ 05/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 20分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 39分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 今天 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 今天 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 今天 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 今天 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 今天 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部