- 浏览: 959800 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
-
博客分类:
- Freemarker
- import java.io.IOException;
- import java.io.Writer;
- import java.util.Iterator;
- import java.util.Map;
- import freemarker.core.Environment;
- import freemarker.template.SimpleNumber;
- import freemarker.template.TemplateBooleanModel;
- import freemarker.template.TemplateDirectiveBody;
- import freemarker.template.TemplateDirectiveModel;
- import freemarker.template.TemplateException;
- import freemarker.template.TemplateModel;
- import freemarker.template.TemplateModelException;
- import freemarker.template.TemplateNumberModel;
- /**
- * FreeMarker 自定义标签实现重复输出内容体。
- *
- *
- * 参数:
- * count: 重复的次数,必须的且非负整数。
- * hr: 设置是否输出HTML标签 "hr" 元素. Boolean. 可选的默认为fals.
- *
- *
- * 循环变量: 只有一个,可选的. 从1开始。
- *
- *
- */
- public class RepeatDirective implements TemplateDirectiveModel {
- private static final String PARAM_NAME_COUNT = "count" ;
- private static final String PARAM_NAME_HR = "hr" ;
- public void execute(Environment env, Map params, TemplateModel[] loopVars,
- TemplateDirectiveBody body) throws TemplateException, IOException {
- // ---------------------------------------------------------------------
- // 处理参数
- int countParam = 0 ;
- boolean countParamSet = false ;
- boolean hrParam = false ;
- Iterator paramIter = params.entrySet().iterator();
- while (paramIter.hasNext()) {
- Map.Entry ent = (Map.Entry) paramIter.next();
- String paramName = (String) ent.getKey();
- TemplateModel paramValue = (TemplateModel) ent.getValue();
- if (paramName.equals(PARAM_NAME_COUNT)) {
- if (!(paramValue instanceof TemplateNumberModel)) {
- throw new TemplateModelException( "The \"" + PARAM_NAME_HR
- + "\" parameter " + "must be a number." );
- }
- countParam = ((TemplateNumberModel) paramValue).getAsNumber()
- .intValue();
- countParamSet = true ;
- if (countParam < 0 ) {
- throw new TemplateModelException( "The \"" + PARAM_NAME_HR
- + "\" parameter " + "can't be negative." );
- }
- } else if (paramName.equals(PARAM_NAME_HR)) {
- if (!(paramValue instanceof TemplateBooleanModel)) {
- throw new TemplateModelException( "The \"" + PARAM_NAME_HR
- + "\" parameter " + "must be a boolean." );
- }
- hrParam = ((TemplateBooleanModel) paramValue).getAsBoolean();
- } else {
- throw new TemplateModelException( "Unsupported parameter: "
- + paramName);
- }
- }
- if (!countParamSet) {
- throw new TemplateModelException( "The required \""
- + PARAM_NAME_COUNT + "\" paramter" + "is missing." );
- }
- if (loopVars.length > 1 ) {
- throw new TemplateModelException(
- "At most one loop variable is allowed." );
- }
- // Yeah, it was long and boring...
- // ---------------------------------------------------------------------
- // 真正开始处理输出内容
- Writer out = env.getOut();
- if (body != null ) {
- for ( int i = 0 ; i < countParam; i++) {
- // 输出 <hr> 如果 参数hr 设置为true
- if (hrParam && i != 0 ) {
- out.write("<hr>" );
- }
- // 设置循环变量
- if (loopVars.length > 0 ) {
- loopVars[0 ] = new SimpleNumber(i + 1 );
- }
- // 执行标签内容(same as <#nested> in FTL).
- body.render(env.getOut());
- }
- }
- }
- }
- import java.io.File;
- import java.io.IOException;
- import java.io.Writer;
- import java.util.Map;
- import freemarker.template.Configuration;
- import freemarker.template.DefaultObjectWrapper;
- import freemarker.template.Template;
- import freemarker.template.TemplateException;
- /**
- *
- * 模板工具类
- */
- public class FreeMarkertUtil {
- /**
- * @param templatePath 模板文件存放目录
- * @param templateName 模板文件名称
- * @param root 数据模型根对象
- * @param templateEncoding 模板文件的编码方式
- * @param out 输出流
- */
- public static void processTemplate(String templatePath, String templateName, String templateEncoding, Map<?,?> root, Writer out){
- try {
- Configuration config=new Configuration();
- File file=new File(templatePath);
- //设置要解析的模板所在的目录,并加载模板文件
- config.setDirectoryForTemplateLoading(file);
- //设置包装器,并将对象包装为数据模型
- config.setObjectWrapper(new DefaultObjectWrapper());
- //获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致
- Template template=config.getTemplate(templateName,templateEncoding);
- //合并数据模型与模板
- template.process(root, out);
- out.flush();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }catch (TemplateException e) {
- e.printStackTrace();
- }
- }
- }
- import java.io.OutputStreamWriter;
- import java.util.HashMap;
- import java.util.Map;
- /**
- *
- * 客户端测试模板输入类
- */
- public class RepeatTest {
- public static void main(String[] args) {
- Map<String,Object> root=new HashMap<String, Object>();
- root.put("repeat" , new RepeatDirective());
- FreeMarkertUtil.processTemplate("src/templates" , "repeat.ftl" , "UTF-8" , root, new OutputStreamWriter(System.out));
- }
- }
模板文件repeat.ftl如下:
- <#assign x = 1 >
- 一个参数:
- <@repeat count= 4 >
- Test ${x}
- <#assign x = x + 1 >
- </@repeat >
- 二个参数:
- <@repeat count= 3 hr= true >
- Test
- </@repeat >
- 循环变量:
- <@repeat count= 3 ; cnt>
- ${cnt}. Test
- </@repeat >
输出结果:
- 一个参数:
- Test 1
- Test 2
- Test 3
- Test 4
- 二个参数:
- Test
- <hr> Test
- <hr> Test
- 循环变量:
- 1 . Test
- 2 . Test
- 3 . Test
摘自:http://lovewhzlq.iteye.com/blog/614092
发表评论
-
最新上线的小站 格格衣柜
2012-12-13 18:43 13格格衣柜,www.gegeyigui.com,有兴趣可以去看看 ... -
fck 相关处理
2012-12-10 18:11 1059javascript获取和设置FCKeditor内容 ... -
【转】Java版DBHelper【简单】(MySQL数据库)
2012-06-18 17:47 15411、测试数据库 1.1 数据库数据 ... -
【转】细细品味Web——Json-Lib类库使用手册
2012-06-18 17:46 14961、JsonLib简介 Json ... -
freemarker 自定义标签问题
2012-05-05 10:47 1179倒腾半天,发现是使用标签时,出错了。[@cms_taobaok ... -
【转】freemarker中实现自定义标签(2.3.11版本以后的方式)
2012-05-04 14:32 1510博客分类: ... -
Spring Data JPA 简单介绍
2011-08-26 14:11 15857背景 考虑到公司应用中数据库访问的多 ... -
ajax 乱码
2011-07-26 14:24 1101// 异步通过订单获得订单明细,用于商品价格修改 @ ... -
freemarker 格式化
2011-07-05 14:06 3086freemarker数据格式化问题(即数值超过四位数时有逗号) ... -
object references an unsaved transient instance - save the transient instanc
2011-01-17 18:09 6408出现这个错误的原因是在保存该对象前,发现该对象包含有其他空的对 ... -
防止浏览器缓存css,js静态文件[转]
2011-01-11 16:58 2250什么情况下,要禁止静态文件缓存: 1、经常可能要改动的 js ... -
java 开源cms opencms的使用,如何去掉两个/opemcms路径的方法
2010-07-15 21:00 4696哈哈。。。经过本人测试成功: 买空间的朋友,因为无法配 ... -
通过百度获取天气预报[转]
2010-05-06 15:26 1474public class Getweather { ... -
javascript 跳转新发现 window.open 乱码处理
2010-04-09 20:57 14104搞了两三天的乱码处理,试了很多方法,过滤器啊,编码转换啊,试来 ... -
解决 连接关闭问题
2010-03-12 09:57 1415root cause org.springframewor ... -
远程登录不了em
2009-12-18 10:25 1173修改一下hostlist.ini列表就行了。 -
今天发现
2009-12-08 20:49 1187今天搞了半天jstl不显示 感觉太奇怪了,平时框架也没有问题啊 ... -
java 开发中 java的System.getProperty()方法可以获取的值
2009-11-13 16:54 1400java.version Java ... -
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
2009-11-09 22:05 43527所谓懒加载(lazy)就是延时加载,延迟加载。 什么时候用懒 ... -
SVN在linux下的安装 学习
2009-11-09 17:56 1270SVN在linux下的安装 ...
相关推荐
这个类将定义你的自定义标签的行为,包括如何处理输入参数,如何处理模板模型数据,以及如何生成输出。 2. 注册自定义指令:在你的应用程序中,你需要将自定义指令类注册到FreeMarker配置中。这通常是通过`...
在提供的"TestFreemarkerDiy"示例中,可能包含了一个简单的自定义标签实现以及一个演示如何使用该标签的Freemarker模板文件。通过分析这个示例,我们可以学习如何在实际项目中应用自定义标签,以提高模板的可维护性...
这个项目可能还包括了如何设置Spring MVC配置以支持自定义标签的步骤,以及如何在实际应用中调用这些自定义标签的示例。 自定义标签的灵活性非常高,你可以为任何复杂的业务逻辑或UI组件创建自定义标签。例如,你...
本资源包的核心内容是教你如何在JFinal项目中实现FreeMarker自定义标签的自动扫描和注册,从而提升模板引擎的功能和灵活性。 首先,我们需要理解自定义标签的概念。在FreeMarker中,自定义标签允许开发者扩展其内置...
通过上述内容,我们了解了Freemarker自定义标签的基本概念、创建与使用方法,以及如何在实际项目中发挥作用。自定义标签极大地增强了Freemarker的灵活性,使得模板语言可以更好地适应各种应用场景。在阅读...
总结起来,FreeMarker自定义分页标签宏的实现涉及到前端模板的宏定义与调用,以及后端的数据处理和链接生成。通过这种方式,我们可以创建出灵活且可复用的分页组件,方便地应用于各种项目中。理解并熟练掌握宏的使用...
Freemarker支持条件判断、循环结构、内置函数,以及自定义标签,增强了模板的灵活性。与JSP相比,Freemarker通常被认为更简洁、易读且更易于维护。 将这三个框架结合使用,可以构建出高效、灵活的Java Web应用。...
Freemarker是一个强大的模板...通过这些文档的学习,你将能够熟练地运用Freemarker来编写模板,以及在Jeecms中利用其自定义标签来构建高效、灵活的网站内容管理。不断实践和探索,将使你在Web开发领域更加游刃有余。
5. `说明.txt`: 这个文件可能包含了关于如何使用这些自定义标签的详细说明,包括如何在FreeMarker模板中引用它们以及它们的功能。 要扩展Struts2的FreeMarker标签库,你需要遵循以下步骤: 1. **创建模型类**: 定义...
在JSP(JavaServer Pages)中,自定义标签是通过TLD(Tag Library Descriptor)文件来定义的,它描述了标签的行为、属性、变量等信息。TLD文件通常以`.tld`为扩展名,是XML格式的,用于告诉JSP引擎如何处理特定的...
5. 通用数据模型:FreeMarker 不是直接反射到 Java 对象,Java 对象通过插件式对象封装,以变量方式在模板中显示。 6. 为 Web 准备:在模板语言中内建处理典型 Web 相关任务(如 HTML 转义)的结构。 7. 智能的国际...
在本教程中,我们将探讨如何利用Freemarker模板来导出Word文档,并实现循环插入图片和表格的功能。这对于需要批量生成定制化报告或者文档的应用场景非常有用。 首先,我们需要了解Freemarker的基本语法。在...
一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
freemarker替换变量实例
通常,Word模板会遵循Open XML标准,这样FreeMarker就能识别并处理其中的标签。同时,这个描述中还提到了转换为PDF格式,虽然FreeMarker本身不直接支持PDF生成,但可以结合其他库,如Apache POI或iText,先用...
综上所述,这个自定义分页标签源代码提供了一种便捷的分页解决方案,通过自定义标签的方式简化了页面逻辑,使得开发者可以更专注于业务逻辑的实现,而不是分页的细节。理解并掌握这些知识点对于提升Java Web开发能力...
### Freemarker实现一行两列布局算法 在Web开发中,数据展示经常需要按照特定的格式进行排列,例如常见的列表项按行对齐显示等。Freemarker作为一种强大的模板引擎,可以方便地处理这类布局需求。本文将详细介绍...
例如,`<#if>`用于条件判断,`<#foreach>`用于循环,`<#assign>`用于变量赋值,`<#function>`定义自定义函数。这些元素使得开发者可以在模板中灵活地控制输出内容。 2. **数据模型与变量**: 在Freemarker中,数据...
在自定义指令中,你可以根据需要处理模板输出的文本,添加适当的空格、换行符,甚至可以实现更复杂的格式规则,如基于特定的代码风格指南进行格式化。 2. **模板包含(include指令)**: FreeMarker的`<#include>`...