EventHandler(接口):

Base interface for all event handlers

仅仅是一个事件侦听标志

IncludeEventHandler(接口):

Event handler for include type directives (e.g. #include(), #parse())

Allows the developer to modify the path of the resource returned.

在使用#include(),#parse()语法的时候,允许开发修改include或者parse文件的路径(一般用于资源找不到的情况)

IncludeNotFound(IncludeEventHandler实现类):

Simple event handler that checks to see if an included page is available.

If not, it includes a designated replacement page instead.By default, the name of the replacement page is "notfound.vm", however this

page name can be changed by setting the Velocity property

eventhandler.include.notfound, for example:

eventhandler.include.notfound = error.vm

当使用#include(),#parse()语法的时候,如果提供的资源文件找不到,则默认使用notfound.vm模板代替。

开发者可以通过设置eventhandler.include.notfound属性,修改替代模板的路径。

IncludeRelativePath(IncludeEventHandler实现类):

Event handler that looks for included files relative to the path of the

current template. The handler assumes that paths are separated by a forward

slash "/" or backwards slash "\".

使用相对路径方式,寻找#include或者#parse()中指定的资源文件

InvalidReferenceEventHandler(接口):

Event handler called when an invalid reference is encountered. Allows

the application to report errors or substitute return values

当渲染页面的时候,一旦遇到非法的reference,就会触发此事件。开发者可以侦听此事件,用于错误的报告,或者修改返回的内容。

ReportInvalidReferences(InvalidReferenceEventHandler实现类):

Use this event handler to flag invalid references.

使用这个实现类用于标志非法的references。修改eventhandler.invalidreference.exception属性,可以在捕捉到第一个非法references的时候,停止模板的渲染。

MethodExceptionEventHandler(接口):

Event handler called when a method throws an exception. This gives the

application a chance to deal with it and either

return something nice, or throw.

Please return what you want rendered into the output stream.

渲染模板,一旦发现调用的方法抛出异常的时候,就会触发此事件。允许开发者处理这个异常,输出友好信息或者抛出异常。必须返回一个值用于模板的渲染。

PrintExceptions(MethodExceptionEventHandler实现类):

Simple event handler that renders method exceptions in the page

rather than throwing the exception. Useful for debugging.

By default this event handler renders the exception name only.

To include both the exception name and the message, set the property

eventhandler.methodexception.message to true. To render

the stack trace, set the property eventhandler.methodexception.stacktrace

to true.

模板渲染时,遇到方法异常,输出异常名,而不是抛出这个异常。对于调式,非常有帮助。

通过eventhandler.methodexception.message和eventhandler.methodexception.stacktrace属性的设置,可以输出异常message和stacktrace.

NullSetEventHandler(接口):

Event handler called when the RHS of #set is null. Lets an app approve / veto

writing a log message based on the specific reference.

当使用#set()语法,设置一个null值的时候,会触发此事件。--目前Velocity官方没有提供默认实现。

ReferenceInsertionEventHandler(接口):

Reference 'Stream insertion' event handler. Called with object

that will be inserted into stream via value.toString().

Please return an Object that will toString() nicely

当渲染变量(reference)的时候,就会触发此事件。允许开发者返回更加友好的值--一般用于内容的escape,比如HtmlEscape等。

EscapeHtmlReference(ReferenceInsertionEventHandler实现类):

html escape

EscapeJavaScriptReference(ReferenceInsertionEventHandler实现类):

javascript escape

EscapeSqlReference(ReferenceInsertionEventHandler实现类):

sql escape

EscapeXmlReference(ReferenceInsertionEventHandler实现类):

xml escape

以上是Velocity组件中提供的EventHandler介绍。下面写一个简单的例子来说明EventHandler的使用。

模拟需求,假如输出的内容带有html标签,而输出的内容需要过滤这些标签。如果我们手工对输出变量通过StringEscapeUtils.escapeHtml()来实现,则太过繁琐。所以,我们就可以使用Velocity中的EscapeHtmlReference。demo代码如下:

VelocityEngine ve=newVelocityEngine();

EventCartridge eventCartridge=newEventCartridge();

eventCartridge.addEventHandler(newEscapeHtmlReference());

Context context=newVelocityContext();

context.put("name","

");

eventCartridge.attachToContext(context);

StringWriter writer=newStringWriter();

ve.mergeTemplate(VM_LOCATION,"utf-8", context, writer);

System.out.println("================================");

System.out.println(writer.toString());

System.out.println("================================");

模板文件中,仅仅为 $name

则输出内容如下:

================================<table></table>================================

posted on 2009-02-05 22:26 stone2083 阅读(2495) 评论(0)  编辑  收藏 所属分类: java

eventhandler java_Velocity之EventHandler相关推荐

  1. eventhandler java_用 EventHandler 进行事件监听

    许多开发人员为事件处理创建匿名内部类.对于简单的事件处理,内部类可能成为真正的争论话题.幸运的是,Java1.4 引入了 EventHandler 类,它依赖于监听器的动态生成以方便地处理手头的任务. ...

  2. C# EventHandler 委托和EventHandler<TEventArgs> 委托

    EventHandler 委托 定义 命名空间: System 程序集: System.Runtime.dll 表示将用于处理不具有事件数据的事件的方法. C#复制 public delegate v ...

  3. c# 带返回值的action_C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别...

    今天来讲一讲<C#delegate.event.Action.EventHandler的使用和区别> 目录 所以,event应运而生 所以,EventHandler应运而生 所以,Acti ...

  4. 3、线程通信EventHandler使用

    作者:韩茹 公司:程序咖(北京)科技有限公司 鸿蒙巴士专栏作家 一.使用场景 EventHandler开发场景 EventHandler的主要功能是将InnerEvent事件或者Runnable任务投 ...

  5. eventhandler java_EventHandler

    EventHandler类为动态生成事件侦听器提供支持,其方法执行涉及传入事件对象和目标对象的简单语句. EventHandler类旨在供交互式工具(如应用程序构建器)使用,这些工具允许开发人员在be ...

  6. cocos 的EventHandler 事件派发器

    cocos 的EventHandler 事件派发器 cc.Component.EventHandler 类 官方说明 "EventHandler" 类用来设置场景中的事件回调,该类 ...

  7. EventHandler 泛型委托

    EventHandler 泛型委托 EventHandler 泛型委托 // This example demonstrates the EventHandler<T> delegate. ...

  8. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

  9. 简单的短信验证功能的实现

    相信有很多朋友在做三方登陆的时候会加入短信验证的功能,最近刚好被分配安排实现这一需求,本人新手一枚,特地去网上搜了资料,目前用的比较多的大汉.云通讯还有MOB的smssdk,对比之下,最终选择了完全免 ...

最新文章

  1. ubuntu 目录结构
  2. Socket编程(C语言实现)——TCP协议(网络间通信AF_INET)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输【多线程+循环监听】
  3. mybatis 使用in 查询时报错_使用mybatis的resultMap进行复杂查询 057
  4. Android应用apk的程序签名详解
  5. laravel里面使用event
  6. Python把嵌套的字符串列表转换为整数列表的两种方法
  7. linux的ftp指令发邮件,三种使用Linux命令发送邮件
  8. 有哪些是你踏入社会才明白的道理?
  9. 设计模式——建造者模式 1
  10. CAPL函数 Test Node中注册事件(TestJoin xxx)函数
  11. 手动删除win10恢复分区
  12. 联想昭阳K22-80机器关闭或开启触摸板方法
  13. 在Windows 10上重置忘记密码的4种方法
  14. linux 笔记本双显示器,Ubuntu设置笔记本电脑双显示器(linux)
  15. el-table复选框全部勾选以及勾选回显
  16. 单片机实习音乐播放器的源码
  17. 海底捞:服务喧宾夺主,盈利不见起色
  18. 删除GHOST中win7桌面IE删不掉的解决办法
  19. latex-多个表格引用
  20. java微信公众号素材管理系统_微信公众平台后台素材管理

热门文章

  1. python自动化滑动解锁_Python中Selenium模拟JQuery滑动解锁实例
  2. 【算法】【递归与动态规划模块】斐波那契数列的系列问题解法及递推类型问题的最优解
  3. c++中chrono学习
  4. 两化融合贯标之-波特五力分析
  5. 京东自动签到脚本_京东618瓜分10亿,全自动任务脚本,躺着挣钱~
  6. mysql将10进制转为16进制的函数_用SQL实现某字段十进制转十六进制
  7. 【JavaScript面试专题】经典JS面试题详解!
  8. 软考网络工程师考证(手写笔记)复习专用
  9. 微服务集成OpenFeign(案例分析 -- 实例业务的模拟)
  10. 避免重复运行py文件绘制海龟图报错的一种解决办法