`
steven_cheng
  • 浏览: 28081 次
  • 来自: 北京
社区版块
存档分类
最新评论

freemarker自定义指令

阅读更多

和jsp的自定义tag一样,freemarker也可以自定义指令。

比如,我们需要用一个指令,实现两个数字相加。

我们需要实现一个freemarker的模板指令模型(TemplateDirectiveModel ):

public class TempDireModelStub implements TemplateDirectiveModel {

	public void execute(Environment env, Map params, TemplateModel[] loopVars,
			TemplateDirectiveBody body) throws TemplateException, IOException {
		int v1 = Integer.parseInt(params.get("v1").toString());//①
		int v2 = Integer.parseInt(params.get("v2").toString());
		
		env.getOut().write(String.valueOf(v1+v2));
	}

}

 与jsp tag一样,我们需要给这个指令起一个名字,这样,我们就能在各个模板里用这个名字调用这个指令了。假设我们命名这个指令为vTest,在模板里我们这样使用:

<@vTest v1="1" v2="2"/>

 指令里的两个attribute会被加入到一个Map中,并传入到指令处理方法里,就是叫做params的参数。

 

最后一个问题,怎样把vTest这个名字和我们写的指令处理类对应起来,并且象jsp的tag一样可以在每一个模板文件里使用呢?在jsp中,需要写tld文件,然后在jsp文件头声明一下引用的tld文件;在freemarker里,我们应该把它作为一个公共的模型来使用:

Configuration config = ... ...;
TempDireModelStub tdms = new TempDireModelStub();
config.setSharedVariable("vTest", tdms);

 需要注意的是Map params这个参数,它的key就是attribute的名字,而值是你所写的值的freemarker的封装类型。

如①标记的那段代码,

params.get("v1").toString();

 

修改为

(String)params.get("v1");

 就会出现造型错误。如果是其他类型,应该使用freemarker的那些封装类型。

4
0
分享到:
评论
7 楼 小卡kare 2013-05-05  
   
6 楼 junjieshow 2010-05-07  
在restlet里怎么引入F r e e M a r k e r?
5 楼 wq8987 2009-02-01  
我们的技术总监给我们整了一个柜架,UI层用的就是这个,有很多的地方看不懂!
  
4 楼 steven_cheng 2009-01-23  
wq8987 写道

看了你的这篇文章后,我感觉我对freemarker的了解以深了一个档次,怪不得我以前获得对象的时候老是报错!

我也比较郁闷,好象只能传字符串...
研究了几天还没搞定
3 楼 wq8987 2009-01-22  
看了你的这篇文章后,我感觉我对freemarker的了解以深了一个档次,怪不得我以前获得对象的时候老是报错!
2 楼 wq8987 2009-01-22  
楼主能给我大概的讲下关于freemarker对象包装的那一块的东西吗?
我把英文的文档看了一遍,有很我地方感觉到很模糊啊!
1 楼 wq8987 2009-01-22  
牛,看来楼主对Freemarker相当的精通啊!

相关推荐

    freemarker 自定义freeMarker标签

    1. 创建自定义指令类:你需要创建一个继承自`freemarker.template.TemplateDirectiveModel`的Java类。这个类将定义你的自定义标签的行为,包括如何处理输入参数,如何处理模板模型数据,以及如何生成输出。 2. 注册...

    Freemarker 自定义标签 简单案例

    在这个"Freemarker自定义标签简单案例"中,我们将深入探讨如何利用Freemarker进行模板设计,并结合自定义标签来增强模板的功能。 首先,让我们理解Freemarker的基础知识。Freemarker是一个与语言无关的模板引擎,它...

    freemarker自定义的通用分页指令(标签)源码和使用示例

    一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx

    Struts2、Spring、Freemarker自定义标签

    而在Freemarker中,可以通过扩展其API创建自定义指令,实现更复杂的逻辑或功能。 总结一下,Struts2、Spring和Freemarker的组合为Java Web开发提供了强大的工具集,涵盖了MVC模式的各个方面。它们的自定义标签功能...

    Freemarker通用select下拉框

    这里的`#list`是Freemarker的迭代指令,遍历`dropdownList`中的每一项,并将`key`和`value`分别插入到`&lt;option&gt;`的`value`和文本内容中。 为了实现通用性,我们需要一个方法或服务在后端生成这个`dropdownList`,...

    freemarker格式化缩进文本或include指令

    开发者可以通过自定义指令和利用开源社区的工具,来优化FreeMarker模板的使用,提高工作效率。对于`FormatDirective.java`这样的代码,我们可以通过分析源码,了解它是如何实现文本格式化的,也可以将其作为参考,为...

    FreeMarker标签、指令

    本文将深入探讨FreeMarker的标签、指令、插值规则以及表达式。 首先,FreeMarker 模板文件由四个主要部分组成: 1. 文本:这部分内容会被直接输出。 2. 注释:以`&lt;#-- ... --&gt;`形式存在,不会被输出到最终文档中。...

    FreeMarker指令学习

    本篇文章将深入讲解FreeMarker的指令学习,包括其基本概念、主要指令以及实际应用。 一、FreeMarker的基本概念 1. 模板:FreeMarker的工作核心是模板,模板是一份HTML或XML文件,其中包含静态文本和FreeMarker...

    freemarker-2.3.22

    8. **自定义指令**:Freemarker允许定义自定义指令以扩展其功能,满足特定项目需求。 9. **最佳实践**:合理组织模板文件结构、避免模板过于复杂、正确处理null值等都是使用Freemarker时需要注意的最佳实践。 通过...

    FreeMarker_Programmer Guide

    FreeMarker允许开发人员定义自定义指令,扩展其功能。自定义指令通常以`&lt;@myDirective&gt;`的形式出现,可以处理更复杂的逻辑。 **8. 国际化(i18n)支持** FreeMarker提供对多语言环境的支持,可以使用资源包...

    freemarker中文文档与包

    6. **自定义指令与宏**: 开发者可以创建自定义指令来扩展Freemarker的功能,例如封装复杂的业务逻辑或重用模板片段。宏类似于函数,可以接收参数并嵌入到其他模板中。 7. **错误处理与调试**: Freemarker提供了详细...

    Freemarker模版实现接口和继承(下)

    自定义指令是 Freemarker 强大的特性之一,通过实现 `freemarker.template.DirectiveBody`、`freemarker.template.DirectiveCallSite` 等接口,开发者可以扩展 Freemarker 语言,创建自己的模板指令,满足特定需求...

    FreeMarker手册

    通过`&lt;@myDirective ...&gt;`的形式调用自定义指令,其中`myDirective`是自定义指令的名字。 文件名中的"FreeMarker Manual.pdf"很可能是英文原版的手册,对于想要深入理解FreeMarker原理和细节的开发者来说,这是必不...

    freemarker 教程 使用手册

    1. 自定义指令:可以扩展Freemarker,创建自定义指令以满足特定需求。 2. 缓存机制:Freemarker支持缓存模板,提高性能。 3. 国际化支持:通过`#localize`和`#fmt`指令处理多语言内容。 4. 静态文本和HTML转义:`...

    Freemarker常用指令使用示例

    同时,Freemarker还支持自定义指令和宏,以满足更复杂的需求。 总之,Freemarker的这些常用指令提供了强大的逻辑控制和数据处理能力,使得开发者能够方便地在模板中进行条件判断、循环遍历以及数据操作,从而实现...

    freemarker Demo 适用于freemarker初学

    Freemarker有许多内置的指令,如`include`用于包含其他模板,`import`用于导入宏库,`list`用于遍历集合等。同时,还可以自定义函数和宏来扩展功能。 10. **模板调试** Freemarker提供了一个调试模式,可以帮助...

    freemarker中文文档

    - **自定义指令**是**Freemarker**提供的一种扩展机制,允许用户定义自己的指令。 - 用户可以通过实现特定接口并将其注册到**Freemarker**配置中来定义自定义指令。 ##### 4.2 在模板中定义变量 - **Freemarker**...

Global site tag (gtag.js) - Google Analytics