`
bwong
  • 浏览: 7510 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Velocity自定义指令(函数)

阅读更多
使用velocity的时候,我们可能需要实现自定义的函数,类似:

#somefun()

这个函数可能是需要做一些业务代码,或者往context存取变量,或者可以向页面输出html代码。

假如我们要写一个输出hello xxx的函数,其中xxx是从context中取出的变量值,首先要在velocity.properties中添加一个:

userdirective=me.bwong.vm.HelloFun,...others

这一行告诉velocity引擎,在我的工程中有一个velocity函数,这个函数实现类是me.bwong.vm.HelloFun,这个类需要实现接口:org.apache.velocity.runtime.directive.Directive,参考如下代码:

public class HelloFun extends Directive {    
@Override
    public String getName() {
        return "hellofun";
    }
@Override
    public int getType() {
        return LINE;
    }    
@Override
    public boolean render(InternalContextAdapter context, Writer writer, Node node) throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException {
         return true;
    }
}

getName接口用来告诉velocity这个函数名是什么,也就是页面上调用这个函数的名称,比如#hellofun();

getType接口用来告诉velocity这个函数类型,可以是行也可以是块函数;

render接口用来输出html代码,当然也可以不输出,如果需要输出,则使用入参的writer.write("some html"),context是当前velocity的容器,可以存取变量,比如在页面上使用#set($name="bwong"),可以通过context.get("name")取出"bwong",node里面可以取出调用这个函数时的入参,比如#hellofun("a"),通过node.jjtGetChild(0).value(context)取出"a",所以:

writer.write("hello " + node.jjtGetChild(0).value(context));

就可以输出"hello xxx",xxx是调用这个函数时的入参。

欢迎光临我的独立博客http://bwong.me
2
4
分享到:
评论

相关推荐

    Velocity

    这些自定义指令可以是简单的函数,也可以是复杂的逻辑。此外,还可以通过 `VelocityTools` 注册工具类,将常用的 Java 类库方法暴露给模板使用,例如日期格式化、URL编码等。 **5. 与其他技术的集成** Velocity ...

    Velocity用户手册 中文版

    2. **可扩展性**:Velocity 支持自定义指令和函数,可以扩展其功能以满足特定需求。 3. **性能优化**:Velocity 使用编译模板的方式提高执行效率,生成的模板类在第一次运行时被编译成Java字节码。 4. **安全**:...

    velocity入门使用教程

    在velocity.properties文件中,可以指定toolbox.xml文件,该文件用于定义工具箱,工具箱中可以包含自定义的Velocity工具(Macro)和函数(Function)。这些工具和函数可以在模板中直接调用,简化模板编写。 通过...

    velocity的jar包

    1. **模板引擎**:Velocity提供了一个强大的模板引擎,允许开发者使用简单的文本格式来创建动态页面,模板中的指令由#号开头,如#{if}、#{foreach}等。 2. **模板语言**:Velocity模板语言(VTL)是 Velocity 的...

    Velocity简单案例

    8. **宏库和自定义指令**: Velocity允许创建宏库,宏是一种可重用的代码块,可以通过`#macro`定义。此外,还可以注册自定义指令扩展模板语言的功能。 9. **错误处理与调试**: Velocity提供了错误处理机制,当模板...

    Velocity用户手册(中文)

    4. **可扩展性**: Velocity支持自定义指令和宏,可以轻松地扩展功能以满足特定需求。 5. **社区支持**: 作为Apache项目,Velocity有着丰富的文档和活跃的社区支持,遇到问题时可以得到及时的帮助。 **Velocity核心...

    Velocity入门小实例,纯java工程

    而自定义指令则允许扩展Velocity的功能。 8. **调试与优化** 当模板出现问题时,Velocity提供了一些工具和日志选项来帮助调试。可以调整日志级别以获取更详细的错误信息,或使用`#set()`指令来检查变量的值。 ...

    Velocity_API

    Velocity 允许自定义指令和事件处理器,以适应特定的业务需求。 总结,Velocity API 提供了一套强大且灵活的工具,帮助开发者构建高效的数据驱动的模板。通过理解和熟练运用 Velocity API,我们可以创建出既美观又...

    Velocity模板使用指南中文版

    Velocity 允许用户自定义指令和宏来扩展其功能。指令是 VTL 中的一类特殊元素,而宏则类似于可重用的函数,可以接收参数并在模板中多次调用。 ### 5. 变量和引用规则 Velocity 支持多种变量引用方式,包括点运算符...

    Velocity介紹

    5. **可扩展性**: Velocity支持自定义指令和函数,可以根据需求扩展功能。 **使用场景** 1. **Web应用**: 在JSP之前,Velocity曾是很多Java Web应用的首选视图技术,它可以生成动态HTML内容。 2. **邮件模板**: ...

    Velocity--java的模板引擎

    例如,可以创建自定义的函数库,方便在模板中调用复杂的功能。同时,通过合理的缓存策略和配置,可以进一步提升Velocity的性能。 总之,Velocity作为Java的模板引擎,以其简单易用和高效稳定的特性,被广泛应用于...

    Velocity文档和NVelocity类库

    NVelocity支持自定义指令和事件处理器,可以根据项目需求进行扩展。例如,可以创建自定义的逻辑指令或过滤器,以增强模板的灵活性。同时,通过调整缓存策略和优化模板设计,可以提高模板引擎的性能。 **模板设计...

    velocity 简单实例

    4. **自定义指令**:通过实现 `org.apache.velocity.app.VelocimacroFactory` 接口,可以扩展 Velocity 提供自定义的模板指令。 在实际应用中,Velocity 常常与 Spring MVC 或 Struts 等框架结合使用,作为视图层的...

    velocity中文文档 教程

    3. **宏**:自定义的可重用代码块,类似于函数,可以接受参数。 4. **注释**:`#comment` 和 `##` 用于在模板中添加注释。 **Velocity的使用** 1. **初始化Velocity上下文**:在Java代码中,你需要创建一个`...

    velocity文档及其详细语法

    此外,Velocity还有一系列内置的工具类(如`#set`,`#if`,`#foreach`),以及可以自定义的Velocity工具(VelocityTools)来扩展功能。 ## 3. 逻辑运算和比较操作符 Velocity支持基本的逻辑运算符(`&&`,`||`,`!...

    freemarker&velocity的使用

    4. **函数和宏**:Freemarker提供了内置函数,如`htmlEscape`用于转义HTML特殊字符,同时用户可以自定义宏来封装重复的模板片段。 5. **模板配置**:可以通过`freemarker.cfg.properties`文件配置模板解析的全局选项...

    Velocity用户手册(中文版)

    2. **宏**:Velocity的宏类似于函数,可以封装重复的模板代码,通过`#macro`定义,`#invoke`调用。 3. **逃逸机制**:使用`\`可以转义特殊字符,如`\$`表示输出美元符号。 4. **自定义工具类**:开发者可以创建...

    Velocity 源码例子

    - **自定义指令和工具库**:可以通过实现`MacroLibrary`接口添加自定义宏,或者通过`VelocityEngine.setProperty()`注册自定义工具类。 - **错误处理和调试**:Velocity 提供了丰富的日志和错误处理机制,以及模板...

    记录一下Velocity防Xss攻击

    例如,可以使用Velocity的内置宏或者自定义函数来自动转义HTML特殊字符,如 `、`>`、`&` 和 `'`。 `EscapeRequestReference`可能是一个类,用于处理HTTP请求中的引用,并确保它们在被插入到Velocity模板中之前得到...

    Velocity初始化过程解析

    在实际应用中, Velocity还支持自定义事件处理器(Event Cartridge)、宏库(Macro Library)以及用户自定义的指令(User-defined Directives),这些特性大大增强了模板的功能性和可扩展性。 对于源码阅读者,理解...

Global site tag (gtag.js) - Google Analytics