Uploaded image for project: 'Velocity'
  1. Velocity
  2. VELOCITY-260

patch to event handling configuration / new event handlers

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.5
    • 1.5
    • Engine
    • None
    • Operating System: other
      Platform: Other
    • 28388

    Description

      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.

      eventhandler.referenceinsertion.class =
      org.apache.velocity.app.event.implement.EscapeXMLEntities

      (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
      available.

      eventhandler.include.class =
      org.apache.velocity.app.event.implement.IncludeRelativePath,org.apache.velocity
      .app.event.implement.IncludeNotFound

      (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 & < > ")
      – IncludeNotFound
      – IncludeRelativePath
      – PrintExceptions

      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.

      Attachments

        1. ASF.LICENSE.NOT.GRANTED--about this patch.txt
          5 kB
          Will Glass-Husain
        2. ASF.LICENSE.NOT.GRANTED--event1.patch
          107 kB
          Will Glass-Husain
        3. ASF.LICENSE.NOT.GRANTED--includeevent.zip
          4 kB
          Will Glass-Husain
        4. ASF.LICENSE.NOT.GRANTED--src.zip
          22 kB
          Will Glass-Husain
        5. ASF.LICENSE.NOT.GRANTED--testcases.xml
          15 kB
          Will Glass-Husain
        6. ASF.LICENSE.NOT.GRANTED--testcases.xml
          15 kB
          Will Glass-Husain

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            wglass@forio.com Will Glass-Husain
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment