`
yongtree
  • 浏览: 234679 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

jfinal下超爽的freemarker自定义标签,web开发的利器

阅读更多

为什么采用freemarker?

1、模板技术,不依附于语言和框架,前端和后端解耦,便于分工协作,更好的协同。

2、页面相应速度快

3、前端非常的灵活,采用自定义标签可以在不更改后端的基础上很容易的构造前端逻辑,可适应多变的网站。

为什么要自定义标签?

答案在第一个问题的第三点,我们需要一个前端灵活的架构,在不更改后端逻辑的基础上,很容易的改造前端逻辑。

在SSH的架构中,自定义标签已经可以方便的实现(struts2的标签也是基于freemarker的自定义标签),但是用起来还是不够爽,需要大量的配置,繁琐的依赖注入等。用了jfinal以后,发现自定义freemarker标签在该框架中用起来极爽,寥寥几个类,几行代码就能将自定义标签应用起来。废话不多说了,上代码吧。

第一步:实现标签类


01 /**
02  * 分类标签<br>
03  * 参数:{parent_id:上级主键}
04  * 返回值:{list:分类列表}
05  *
06  * @author yongtree
07  */
08 public class CategoryListDirective implements TemplateDirectiveModel {
09  
10      
11     public void execute(Environment env, Map params, TemplateModel[] loopVars,
12             TemplateDirectiveBody body) throws TemplateException, IOException {
13  
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);
18         else {
19             list = Category.getFirstCategoryList(Category.STATUS_ENABLED);
20         }
21  
22         env.setVariable("list", DEFAULT_WRAPPER.wrap(list));
23         body.render(env.getOut());
24     }
25  
26 }

第二步:action中引入

1 setAttr("_category_list"new CategoryListDirective());

第三步:页面是使用

1 <@_category_list parent_id="2">
2     <#list list as c>
3         <a href="/category/${c.id}">${c.name}</a>
4     </#list>
5 </@_category_list>

我们使用自定义标签的目的是灵活,就是要将action中要做到事情,能直接通过标签在页面上使用。而上面的第二步,需要在action中set,使其action的逻辑不灵活。自定义标签应该能脱离开具体的action,能在更多的模块中用到,不受action的限制。所以第二步需要稍加改造,这是我们可以采用jfinal的全局拦截器,将这些标签初始化内存中,在所有的action中都很容易的注入,当然你可以根据拦截器的相关配置和逻辑,将自定义标签指定到相应的action中。上代码吧

 

01 /**
02  * 自定义标签拦截器
03  * @author yongtree
04  */
05 public class DirectiveInterceptor implements Interceptor {
06  
07     public static CategoryListDirective cld = new CategoryListDirective();
08  
09     public void intercept(ActionInvocation ai) {
10         Controller c = ai.getController();
11         c.setAttr(LABEL_CATEGORY_LIST, cld);
12                 ai.invoke();
13 }
14  
15     public static final String LABEL_CATEGORY_LIST = "_category_list";
16  
17 }

 

配置到Config中

1 /**
2      * 配置全局拦截器
3      */
4     public void configInterceptor(Interceptors me) {
5         me.add(new AuthInterceptor());
6         me.add(new DirectiveInterceptor());
7     }
超爽吧,简单几步,就搞定了自定义标签,这样你就可以把主要的查询和业务封装到标签里。在不改变业务逻辑和结构的基础上,前端逻辑和展示需要调整,以后就只是前端开发人员或者网站美工的工作了,再辅以freemarker的macro宏定义,再前段封装出更加方便使用的界面,那就更加的灵活和高校。所以在以内容为主的网站上,极力推荐采用这种方式来设计你的前端。为啥?波波说了: 为您节约更多时间,去陪恋人、家人和朋友 ;)

洗洗睡了,陪老婆去了,

原文:http://my.oschina.net/yongtree/blog/92309

分享到:
评论

相关推荐

    实现通过jfinal框架自动扫描freemarker的自定义标签.zip

    在Java Web开发中,JFinal和FreeMarker是两个非常重要的工具。JFinal是一个基于Java的高效、极简的Web开发框架,而FreeMarker则是一种模板引擎,用于将数据模型渲染成HTML或者其他格式的文本。本资源包的核心内容是...

    JFinal+freemarker+maven demo实例

    本文主要探讨的是基于Java的Web开发框架JFinal结合模板引擎FreeMarker以及构建工具Maven的一个实战演示。JFinal是一款轻量级的Java Web框架,它以其简洁的API设计、高性能、易于上手等特点受到开发者的青睐。...

    JFinal+Maven+FreeMarker入门实例

    总结,`JFinal+Maven+FreeMarker`的组合为Java Web开发提供了一个高效、简洁的解决方案。JFinal的轻量级特性使得项目启动快速,Maven的依赖管理让项目构建变得简单,而FreeMarker则提供了灵活的视图渲染机制。通过这...

    jfinal-shiro-freemarker:jfinal shiro 插件 freemarker 标签

    jfinal-shiro-freemarker jfinal shiro plugin freemarker tags,查看其他插件-&gt; maven 引用 ${jfinal-shiro-freemarker.version}替换为相应的版本如:0.2 &lt;groupId&gt;cn.dreampie&lt;/groupId&gt; &lt;artifactId&gt;jfinal-...

    JFinal框架在Java Web开发中的应用.pdf

    JFinal是一个专门为Java Web开发打造的轻量级MVC框架,具有国产化、开源化的特点,它是由陆文瑞、卢盼娜和王彦婕等人在山西信息产业技术研究院有限公司进行研究和应用的。JFinal的特点在于它的便捷性、高效性和设计...

    JFinal + shiro+freemarker +bootstrap3 后台基础管理

    JFinal + shiro+freemarker +bootstrap3 后台基础管理 开发说明 1.导入 doc/jfinal-base-admin.sql 2.修改数据库配置文件 src/main/resources/development下example.db.properties文件名为 db.properties 并填写对应...

    jfinal freemarker mysql

    "jfinal freemarker mysql"这一组合,即JFinal框架结合Freemarker模板引擎以及MySQL数据库,是Java Web开发中的一个经典搭配,为快速开发提供了强大的支持。本文将深入探讨这三个组件的特性和它们如何协同工作,以...

    JFinal 最省时间和代码的web开发框架

    **标题解析:** "JFinal 最省时间和代码的web开发框架" JFinal 是一个基于Java语言的高效、轻量级的Web开发框架。它旨在减少开发时间和代码量,提高开发效率,让开发者能够更快地构建出稳定且高性能的Web应用。...

    jfinal 基于 Java 语言的极速 WEB + ORM 框架

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

    Java基于JFinal的枸杞智能灌溉系统的开发设计与实现

    Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java基于JFinal的枸杞智能灌溉系统的开发设计与实现 Java...

    基于JFinal框架的Java Web应用开发研究.pdf

    基于JFinal框架的Java Web应用开发研究是指在Java Web应用开发中,选择合理的开发框架对Java Web应用系统的开发至关重要。常见的Java Web开发框架像Struts、Spring、Hibernate等,虽然使用人数较多,但是它们在使用...

    jfinal-web

    1. **JFinal**:JFinal 是一个基于 Java 的轻量级 Web 开发框架,它采用了 MVC(Model-View-Controller)设计模式,以简洁的API和高度的可配置性著称。在【jfinal-web】项目中,JFinal 负责处理HTTP请求,提供数据...

    JfinalDemo

    Jfinal是一款基于Java语言的轻量级Web开发框架,它以“简单、高效”为设计理念,为开发者提供了一种快速开发Web应用的解决方案。本文将围绕"JfinalDemo"这个项目,详细介绍其核心特点、应用场景以及如何进行项目搭建...

    JFinal2.2 极速开发实战

    作为一本专注于实战应用的书籍,《JFinal2.2 极速开发实战》不仅适合已经有一定Java Web开发经验的开发者,也适用于想要快速入门JFinal框架的新手。 #### 二、作者简介及写作背景 董华健是一名高级应用软件开发...

    基于jfinal+shiro+layui+freemarker等框架和技术结合maven多模块方式构建开发的一款通用内容发布系统

    首先,jfinal作为一款轻量级的Java Web开发框架,以其简洁的API设计和高效的性能脱颖而出。它采用了Model2模式,实现了MVC(模型-视图-控制器)架构,使得开发者可以快速构建Web应用。jfinal的核心特性包括自动扫描...

    jfinal-jfinal-weixin-master.zip 基于maven jfinal 的微信公众号/小程序开发demo

    jfinal-jfinal-weixin-master.zip 基于maven jfinal 的微信公众号/小程序开发demo

    jfinal 扩展开发包

    在Java Web开发领域,JFinal以其轻量级、高效、易用的特性受到了广大开发者的喜爱。它是一款基于Java的MVC框架,为开发者提供了快速构建Web应用的能力。而"jfinal 扩展开发包"则是针对JFinal框架的一次深度拓展,...

    jfinal小木学堂开发环境搭建视频教程源码(jfinal1.9)

    3. 自定义扩展:学习如何根据项目需求,对JFinal进行二次开发和扩展。 六、注意事项 1. lib文件夹中的jar包是项目运行所必需的,确保它们已被正确导入到项目类路径中。 2. 遇到问题时,可参考JFinal官方文档或社区...

    jfinal开发手册

    JFinal是一个基于Java语言的极速Web开发框架,它的核心设计目标包括开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展和Restful。JFinal的版本为2.2,它的特点非常多,包括但不限于MVC架构设计、遵循COC原则...

Global site tag (gtag.js) - Google Analytics