类 RenderTool

java.lang.Object
org.apache.velocity.tools.generic.SafeConfig
org.apache.velocity.tools.generic.RenderTool
直接已知子类:
ViewRenderTool

@DefaultKey("render") public class RenderTool extends SafeConfig
This tool exposes methods to evaluate the given strings as VTL (Velocity Template Language) using either a pre-configured context or one you provide directly.
 Example of eval():
      Input
      -----
      #set( $list = [1,2,3] )
      #set( $object = '$list' )
      #set( $method = 'size()' )
      $render.eval("${object}.$method")

      Output
      ------
      3

 Example of recurse():
      Input
      -----
      #macro( say_hi )hello world!#end
      #set( $foo = '#say_hi()' )
      #set( $bar = '$foo' )
      $render.recurse($bar)

      Output
      ------
      hello world!


 Toolbox configuration:
 <tools>
   <toolbox scope="request">
     <tool class="org.apache.velocity.tools.generic.RenderTool">
       <property name="parseDepth" type="number" value="10"/>
     </tool>
   </toolbox>
 </tools>
 

Ok, so these examples are really lame. But, it seems like someone out there is always asking how to do stuff like this and we always tell them to write a tool. Now we can just tell them to use this tool.

This tool may be used in any scope, however, the context provided for the eval(String) and recurse(String) methods will only be current if the tool is request scoped. If application or session scoped, then the context will be the same one set at the time of the tool's first use. In such a case, each call to eval(String) or recurse(String) will by default create a new Context that wraps the configured one to prevent modifications to the configured Context (concurrent or otherwise). If you wish to risk it and accrete changes then you can relax the thread-safety by setting the 'forceThreadSafe' property to 'false'.

Of course none of the previous paragraph likely applies if you are not using the core tool management facilities or if you stick to the eval(Context,String) and recurse(Context,String) methods. :)

This tool by default will catch and log any exceptions thrown during rendering and instead return null in such cases. It also limits recursion, by default, to 20 cycles, to prevent infinite loops. Both settings may be configured to behave otherwise.

版本:
$Revision: 671010 $ $Date: 2008-06-23 20:40:41 -0700 (Mon, 23 Jun 2008) $
作者:
Nathan Bubna
  • 字段详细资料

    • DEFAULT_PARSE_DEPTH

      public static final int DEFAULT_PARSE_DEPTH
      The maximum number of loops allowed when recursing.
      从以下版本开始:
      VelocityTools 1.2
      另请参阅:
    • KEY_PARSE_DEPTH

      @Deprecated public static final String KEY_PARSE_DEPTH
      已过时。
      另请参阅:
    • KEY_CATCH_EXCEPTIONS

      @Deprecated public static final String KEY_CATCH_EXCEPTIONS
      已过时。
      另请参阅:
    • KEY_FORCE_THREAD_SAFE

      public static final String KEY_FORCE_THREAD_SAFE
      另请参阅:
    • LOG_TAG

      private static final String LOG_TAG
      另请参阅:
    • engine

      private org.apache.velocity.app.VelocityEngine engine
    • context

      private org.apache.velocity.context.Context context
    • parseDepth

      private int parseDepth
    • catchExceptions

      private boolean catchExceptions
    • forceThreadSafe

      private boolean forceThreadSafe
  • 构造器详细资料

    • RenderTool

      public RenderTool()
  • 方法详细资料

    • configure

      protected void configure(ValueParser parser)
      Looks for deprecated parse depth and catch.exceptions properties, as well as any 'forceThreadSafe' setting.
      覆盖:
      configure 在类中 SafeConfig
    • setVelocityEngine

      public void setVelocityEngine(org.apache.velocity.app.VelocityEngine ve)
      Allow user to specify a VelocityEngine to be used in place of the Velocity singleton.
    • setParseDepth

      public void setParseDepth(int depth)
      Set the maximum number of loops allowed when recursing.
      从以下版本开始:
      VelocityTools 1.2
    • setVelocityContext

      public void setVelocityContext(org.apache.velocity.context.Context context)
      Sets the Context to be used by the eval(String) and recurse(String) methods.
    • getParseDepth

      public int getParseDepth()
      Get the maximum number of loops allowed when recursing.
      从以下版本开始:
      VelocityTools 1.2
    • setCatchExceptions

      public void setCatchExceptions(boolean catchExceptions)
      Sets whether or not the render() and eval() methods should catch exceptions during their execution or not.
      从以下版本开始:
      VelocityTools 1.3
    • getCatchExceptions

      public boolean getCatchExceptions()
      Returns true if this render() and eval() methods will catch exceptions thrown during rendering.
      从以下版本开始:
      VelocityTools 1.3
    • eval

      public String eval(String vtl) throws Exception

      Evaluates a String containing VTL using the context passed to the setVelocityContext(org.apache.velocity.context.Context) method. If this tool is request scoped, then this will be the current context and open to modification by the rendered VTL. If application or session scoped, the context will be a new wrapper around the configured context to protect it from modification. The results of the rendering are returned as a String. By default, null will be returned when this throws an exception. This evaluation is not recursive.

      参数:
      vtl - the code to be evaluated
      返回:
      the evaluated code as a String
      抛出:
      Exception
    • recurse

      public String recurse(String vtl) throws Exception

      Recursively evaluates a String containing VTL using the current context, and returns the result as a String. It will continue to re-evaluate the output of the last evaluation until an evaluation returns the same code that was fed into it.

      参数:
      vtl - the code to be evaluated
      返回:
      the evaluated code as a String
      抛出:
      Exception
      另请参阅:
    • eval

      public String eval(org.apache.velocity.context.Context ctx, String vtl) throws Exception

      Evaluates a String containing VTL using the current context, and returns the result as a String. By default if this fails, then null will be returned, though this tool can be configured to let Exceptions pass through. This evaluation is not recursive.

      参数:
      ctx - the current Context
      vtl - the code to be evaluated
      返回:
      the evaluated code as a String
      抛出:
      Exception
    • internalEval

      protected String internalEval(org.apache.velocity.context.Context ctx, String vtl) throws Exception
      抛出:
      Exception
    • recurse

      public String recurse(org.apache.velocity.context.Context ctx, String vtl) throws Exception

      Recursively evaluates a String containing VTL using the current context, and returns the result as a String. It will continue to re-evaluate the output of the last evaluation until an evaluation returns the same code that was fed into it or the number of recursive loops exceeds the set parse depth.

      参数:
      ctx - the current Context
      vtl - the code to be evaluated
      返回:
      the evaluated code as a String
      抛出:
      Exception
    • internalRecurse

      protected String internalRecurse(org.apache.velocity.context.Context ctx, String vtl, int count) throws Exception
      抛出:
      Exception
    • debug

      private void debug(String message)
    • debug

      private void debug(String message, Throwable t)