Substantial patch to event handling infrastructure. See readme.txt and
discussion on velocity-dev list for more detail. Key changes:
(1) Event handlers can be registered in the velocity-properties, e.g.
(2) Multiple event handlers can be registered for a given type and are applied
in a "filter" pattern. The specifics vary per event handler (documented in
the JavaDocs). The following example would first enforce a relative path rule
to included templates, and would then check to see if the template is actually
(3) Event handlers have a new lifecycle. Before they are called they are
initialized with a link to RuntimeServices. This allows the handlers to
retrieve Velocity properties and to have access to a number of interesting
system methods. Each event handler is also given the current context when it
is called. This allows the template designer (or custom directives) to change
the behavior of the event. A nice example of this is the EscapeXMLEntities
reference insertion handler, which stops escaping HTML when an "ignoreEscape"
flag is set in the context.
(4) New implemented event handlers include:
– EscapeXMLEntities (escapes HTML/XML & < > ")
Using these built-in event handlers, users can do useful things (e.g. escape
HTML) with no extra coding just by configuring velocity.properties.
(5) The patch is almost entirely backwards compatible. The old "attach the
handler to the context" still works, although this results in a per-request
rather than per-application lifecycle for the handler. One difference... the
API for the event handlers has changed, and as such will require minor editing
and recompilation of user code. (I think this is worth it). All tests (old
and new) work.