[ 
https://issues.apache.org/jira/browse/VELOCITY-734?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nathan Bubna resolved VELOCITY-734.
-----------------------------------

    Resolution: Fixed

Thanks, chad!

> Add name of missing resource to Velocity context for the IncludeNotFound 
> event handler implementation
> -----------------------------------------------------------------------------------------------------
>
>                 Key: VELOCITY-734
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-734
>             Project: Velocity
>          Issue Type: New Feature
>          Components: Engine
>            Reporter: chad davis
>             Fix For: 1.7
>
>   Original Estimate: 0.25h
>  Remaining Estimate: 0.25h
>
> When a resource is not found, the IncludeNotFound event handler will insert a 
> "notfound.vm" template into the stream.  This provides a robust way of 
> finishing the rendering process.  It would be very helpful if the notfound 
> template could also inform the user of the full name of the missing resource. 
>  
> The following patch fixes this problem.  I've made IncludeNotFound implement 
> the ContextAware interface.  It then addes the name of the missing resource 
> to the context so it can be referenced from the notfound template.  I suppose 
> it might also be nice to make the name of the reference configurable . . . .
> Index: 
> /home/readyportal/Desktop/machineOneWorkspaces/bipSpace/velocity/src/java/org/apache/velocity/app/event/implement/IncludeNotFound.java
> ===================================================================
> --- 
> /home/readyportal/Desktop/machineOneWorkspaces/bipSpace/velocity/src/java/org/apache/velocity/app/event/implement/IncludeNotFound.java
>     (revision 809033)
> +++ 
> /home/readyportal/Desktop/machineOneWorkspaces/bipSpace/velocity/src/java/org/apache/velocity/app/event/implement/IncludeNotFound.java
>     (working copy)
> @@ -20,7 +20,9 @@
>   */
>  
>  import org.apache.velocity.app.event.IncludeEventHandler;
> +import org.apache.velocity.context.Context;
>  import org.apache.velocity.runtime.RuntimeServices;
> +import org.apache.velocity.util.ContextAware;
>  import org.apache.velocity.util.RuntimeServicesAware;
>  import org.apache.velocity.util.StringUtils;
>  
> @@ -36,6 +38,13 @@
>   * eventhandler.include.notfound = error.vm
>   * </PRE>
>   * </code>
> + * 
> + * <p>
> + * The name of the missing resource is put into the Velocity context, under 
> the
> + * key "missingResource", so that the notfound.vm template can report the 
> missing
> + * resource with a Velocity reference, like:
> + * <code>$missingResource</code>
> + * </p>
>   *
>   * @author <a href="mailto:[email protected]";>Will Glass-Husain</a>
>   * @version $Id$
> @@ -41,7 +50,7 @@
>   * @version $Id$
>   * @since 1.5
>   */
> -public class IncludeNotFound implements 
> IncludeEventHandler,RuntimeServicesAware {
> +public class IncludeNotFound implements 
> IncludeEventHandler,RuntimeServicesAware, ContextAware {
>  
>      private static final String DEFAULT_NOT_FOUND = "notfound.vm";
>      private static final String PROPERTY_NOT_FOUND = 
> "eventhandler.include.notfound";
> @@ -47,6 +56,7 @@
>      private static final String PROPERTY_NOT_FOUND = 
> "eventhandler.include.notfound";
>      private RuntimeServices rs = null;
>      String notfound;
> +    Context context;
>  
>      /**
>       * Chseck to see if included file exists, and display "not found" page 
> if it
> @@ -70,6 +80,11 @@
>          boolean exists = (rs.getLoaderNameForResource(includeResourcePath) 
> != null);
>          if (!exists)
>          {
> +             /**
> +              * Put the missingResource name in the velocity context so that 
> the notfound.vm can report the info to the user.
> +              */
> +             context.put("missingResource", includeResourcePath );
> +             
>              if (rs.getLoaderNameForResource(notfound) != null)
>              {
>                  return notfound;
> @@ -99,4 +114,12 @@
>           notfound = StringUtils.nullTrim(rs.getString(PROPERTY_NOT_FOUND, 
> DEFAULT_NOT_FOUND));
>       }
>  
> +
> +    /**
> +     * Part of the ContextAware interface.  
> +     */
> +     public void setContext(Context context) {
> +             this.context = context;
> +     }
> +
>  }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to