Freemarker自定义标签
来源:互联网 发布:投资返利网站源码 编辑:程序博客网 时间:2024/06/05 18:53
为什么采用freemarker?
1、模板技术,不依附于语言和框架,前端和后端解耦,便于分工协作,更好的协同。
2、页面相应速度快
3、前端非常的灵活,采用自定义标签可以在不更改后端的基础上很容易的构造前端逻辑,可适应多变的网站。
为什么要自定义标签?
答案在第一个问题的第三点,我们需要一个前端灵活的架构,在不更改后端逻辑的基础上,很容易的改造前端逻辑。
在SSH的架构中,自定义标签已经可以方便的实现(struts2的标签也是基于freemarker的自定义标签),但是用起来还是不够爽,需要大量的配置,繁琐的依赖注入等。用了jfinal以后,发现自定义freemarker标签在该框架中用起来极爽,寥寥几个类,几行代码就能将自定义标签应用起来。我们使用自定义标签的目的是灵活,就是要将action中要做到事情,能直接通过标签在页面上使用。
在不改变业务逻辑和结构的基础上,前端逻辑和展示需要调整,以后就只是前端开发人员或者网站美工的工作了,再辅以freemarker的macro宏定义,再前段封装出更加方便使用的界面,那就更加的灵活和高效。所以在以内容为主的网站上,极力推荐采用这种方式来设计你的前端。为啥?波波说了: 为您节约更多时间,去陪恋人、家人和朋友 ;)
1.自定义标签需要实现TemplateDirectiveModel这个接口中的execute方法
public class UserListDirective implements TemplateDirectiveModel{ @Autowired private UserDAO userDao; @Override public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { String name = params.get("name").toString(); List<User> userlist = userDao.findByProperty("name", name); env.setVariable("userList", getBeansWrapper().wrap(userlist)); body.render(env.getOut()); } public static BeansWrapper getBeansWrapper(){ BeansWrapper beansWrapper = new BeansWrapperBuilder(Configuration.VERSION_2_3_21).build(); return beansWrapper; }}
2 配置 UserListDirective 到spring bean xml中
<bean id="userListDirective" class="com.action.directive.UserListDirective"></bean>
3 将spring bean 设置到freemarkerConfig全局变量中去。
<!-- freemarker的配置 --><bean id="freemarkerConfig2" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/" /> <property name="freemarkerVariables"> <map > <entry key="userListDirective" value="userListTag" /> </map> </property> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">0</prop> <prop key="defaultEncoding">UTF-8</prop> <prop key="url_escaping_charset">UTF-8</prop> <prop key="locale">zh_CN</prop> <prop key="boolean_format">true,false</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <prop key="date_format">yyyy-MM-dd</prop> <prop key="time_format">HH:mm:ss</prop> <prop key="number_format">0.######</prop> <prop key="whitespace_stripping">true</prop> </props> </property> </bean>
4 ftl文件中的访问方式
<@userListTag name="zhangsan"> <#if userList?? && userList?size gt 0> <#list userList as user> <a href="">${user.name}</a> </#list> </#if></@userListTag>
TemplateDirectiveModel接口是freemarker自定标签或者自定义指令的核心处理接口。通过实现该接口,用户可以自定义标签(指令)进行任意操作,、 任意文本写入模板的输出。
该接口中只定义了如下方法,当模板页面遇到用户自定义的标签指令时,该方法会被执行。
public void execute(Environment env, Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException;
@param env:系统环境变量,通常用它来输出相关内容,如Writer out = env.getOut();
@param params:自定义标签传过来的对象,其key=自定义标签的参数名,value值是TemplateModel类型,而TemplateModel是一个接口类型,通常我们都使用TemplateScalarModel接口来替代它获取一个String 值,如TemplateScalarModel.getAsString();当然还有其它常用的替代接口,如TemplateNumberModel获取number,TemplateHashModel等
@param loopVars 循环替代变量
@param body 用于处理自定义标签中的内容,如<@myDirective>将要被处理的内容
- freemarker 自定义freeMarker标签
- FreeMarker 自定义标签
- freemarker编写自定义标签
- freemarker自定义标签
- FreeMarker自定义标签
- freemarker 自定义标签
- freemarker自定义标签
- freemarker自定义标签
- Freemarker自定义标签
- Freemarker 自定义标签实现
- freeMarker 自定义标签
- Struts2结合freemarker自定义标签
- Struts2与freemarker自定义标签
- Struts2结合freemarker自定义标签
- freemarker自定义标签(一)
- freemarker自定义标签(二)
- Freemarker 自定义标签 实现TemplateDirectiveModel
- 如何实现自定义freemarker标签
- Spring 面向切面编程AOP
- Charles 抓包工具使用方法
- c++之Vector(动态 )
- UVa 714
- HTML5 进阶系列:web Storage
- Freemarker自定义标签
- unix高级环境编程(二)-------------------基础知识
- angularJs中关于ng-class的三种使用方式说明
- java面试题经典1
- Apache服务器错误问题Internal Server Error
- Java之TCP网络编程
- BZOJ 3208 花神的秒题计划Ⅰ
- 解决Cannot change version of project facet Dynamic Web M
- JS实现H5图片3D旋转动画