为什么采用freemarker?
1、模板技术,不依附于语言和框架,前端和后端解耦,便于分工协作,更好的协同。
2、页面相应速度快
3、前端非常的灵活,采用自定义标签可以在不更改后端的基础上很容易的构造前端逻辑,可适应多变的网站。
为什么要自定义标签?
答案在第一个问题的第三点,我们需要一个前端灵活的架构,在不更改后端逻辑的基础上,很容易的改造前端逻辑。
在SSH的架构中,自定义标签已经可以方便的实现(struts2的标签也是基于freemarker的自定义标签),但是用起来还是不够爽,需要大量的配置,繁琐的依赖注入等。用了jfinal以后,发现自定义freemarker标签在该框架中用起来极爽,寥寥几个类,几行代码就能将自定义标签应用起来。废话不多说了,上代码吧。
第一步:实现标签类
08 |
public class CategoryListDirective implements TemplateDirectiveModel {
|
11 |
public void execute(Environment env, Map params, TemplateModel[] loopVars,
|
12 |
TemplateDirectiveBody body) throws TemplateException, IOException {
|
14 |
List<Category> list = new ArrayList<Category>();
|
15 |
if (params.containsKey( "parent_id" ) && params.get( "parent_id" ) != null ) {
|
16 |
list = Category.getCategoryList(params.get( "parent_id" ).toString(),
|
17 |
Category.STATUS_ENABLED);
|
19 |
list = Category.getFirstCategoryList(Category.STATUS_ENABLED);
|
22 |
env.setVariable( "list" , DEFAULT_WRAPPER.wrap(list));
|
23 |
body.render(env.getOut());
|
第二步:action中引入
1 |
setAttr( "_category_list" , new CategoryListDirective());
|
第三步:页面是使用
1 |
<@_category_list parent_id="2"> |
3 |
< a href = "/category/${c.id}" >${c.name}</ a >
|
我们使用自定义标签的目的是灵活,就是要将action中要做到事情,能直接通过标签在页面上使用。而上面的第二步,需要在action中set,使其action的逻辑不灵活。自定义标签应该能脱离开具体的action,能在更多的模块中用到,不受action的限制。所以第二步需要稍加改造,这是我们可以采用jfinal的全局拦截器,将这些标签初始化内存中,在所有的action中都很容易的注入,当然你可以根据拦截器的相关配置和逻辑,将自定义标签指定到相应的action中。上代码吧
05 |
public class DirectiveInterceptor implements Interceptor {
|
07 |
public static CategoryListDirective cld = new CategoryListDirective();
|
09 |
public void intercept(ActionInvocation ai) {
|
10 |
Controller c = ai.getController();
|
11 |
c.setAttr(LABEL_CATEGORY_LIST, cld);
|
15 |
public static final String LABEL_CATEGORY_LIST = "_category_list" ;
|
配置到Config中
4 |
public void configInterceptor(Interceptors me) {
|
5 |
me.add( new AuthInterceptor());
|
6 |
me.add( new DirectiveInterceptor());
|
超爽吧,简单几步,就搞定了自定义标签,这样你就可以把主要的查询和业务封装到标签里。在不改变业务逻辑和结构的基础上,前端逻辑和展示需要调整,以后就只是前端开发人员或者网站美工的工作了,再辅以freemarker的macro宏定义,再前段封装出更加方便使用的界面,那就更加的灵活和高校。所以在以内容为主的网站上,极力推荐采用这种方式来设计你的前端。为啥?波波说了: 为您节约更多时间,去陪恋人、家人和朋友 ;)
洗洗睡了,陪老婆去了,
原文:http://my.oschina.net/yongtree/blog/92309
分享到:
相关推荐
在jfinal的基础上,实现freemarker自定义标签的自动扫描和注册,本资源包不含jfinal框架,需在已有框架的基础上添加包中的代码,如需jfinal框架请自行到官网下载
jfinal-shiro-freemarker jfinal shiro plugin freemarker tags,查看其他插件-> maven 引用 ${jfinal-shiro-freemarker.version}替换为相应的版本如:0.2 <groupId>cn.dreampie</groupId> <artifactId>jfinal-...
JFinal+Maven+FreeMarker入门实例 JFinal这个框架确实不错,受够了Struts 2
JFinal + shiro+freemarker +bootstrap3 后台基础管理 开发说明 1.导入 doc/jfinal-base-admin.sql 2.修改数据库配置文件 src/main/resources/development下example.db.properties文件名为 db.properties 并填写对应...
JFinal框架在Java Web开发中的应用.pdf
此次写这个文章主要是为了记得的一个笔记成分,然后分享一下自己在入门学习是的一些步骤和源码问题,分享给大家一起学习,一起探讨深入
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!...
Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java...
jfinal freemarker mysql 快速开发 http://knight-black-bob.iteye.com/blog/2247385
jfinal-jfinal-weixin-master.zip 基于maven jfinal 的微信公众号/小程序开发demo
jfinal 的开发文档 jfinal 的开发文档 jfinal 的开发文档 jfinal 的开发文档 jfinal 的开发文档 jfinal 的开发文档 jfinal 的开发文档 jfinal 的开发文档 jfinal 的开发文档 jfinal 的开发文档
商品 Freemarker+JFinal+Axzure RP快速开发web项目这是一个简单的使用JFinal & Freemarker快速开发的购物网站
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!...
基于jfinal+shiro+layui+freemarker+ueditor+mysql等框架和技术结合maven多模块方式构建开发的一款通用内容发布系统。
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!...
JFinal 最新2.2版本 开发手册 高清PDF
Jfinal极速开发实战
基于JFinal框架的Java Web应用开发研究.pdf
JFinal框架在Java Web开发中的应用
jfinal+bootstrap+zkclient搭建的后台管理系统,项目当中包含系统管理部分代码,统一配置管理