How does that work for method invocations:

        ... $myObject.getResultset().getColumn("NAME") ...

can a context approach dothe escaping for method calls?

Jose Alberto

> -----Original Message-----
> From: Paulo Gaspar [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, April 04, 2001 2:05 PM
> To: [EMAIL PROTECTED]
> Subject: RE: [PROPOSAL] InsertionListener
> 
> 
> Jose,
> 
> 
> Could a wrapper around the objects you are placing at the 
> context be a solution?
> 
> Since Velocity can use a class with a get() method like:
> 
>   class MyWrapper
>   { private Object theWrappedObject;
> 
>     public MyWrapper(Object anObjectToWrap)
>     { super();
>       theWrappedObject = anObjectToWrap;
>       ...
>     }
> 
>     public Object get(String name)
>     {
>       ...
>     }
>   }
> 
> calling 
>   get("somevalue")
> 
> for an in-template
>   $escapedObject.somevalue
> 
> 
> The wrapper class could use some introspection in the get() 
> method (in a similar way to what Velocity usually does) in 
> order to introspect the wrapped object, get the value for 
> its "somevalue" property, convert it into a string and 
> escape it, giving it back to Velocity.
> 
> So, you would place the objects which have values to escape
> using something like:
>   myContext.put("escapedObject", new MyWrapper(myOriginalObject));
> 
> Of course that, if ALL your objects need to be escaped, you
> could also derive a new version of context that does just that.
> 
> 
> For escaping simple values, like in 
>   $simple
> you can just convert them to an escaped String just when putting
> them in the context, with some method like:
>   String escapeObject(Object obj)
>   { return (null == obj) ? "" : escape(obj.toString());
>   }
>     
> and then
>   myContext.put("simple", MyUtils.escapeObject(simpleObject));
> 
> 
> Of course that you could create a VelocityContext descendent with
> new methods like:
>   public void putSimple(String name, Object value)
> 
> that would make this last simple escaping and then use the 
> inherited put(), and like
>   public void putWrap(String name, Object value)
> 
> that would do the wrapping thing I first talked about.
> 
> 
> And, of course, you are still in trouble if you use things like:
>   $more.levels.toget.it
> 
> But if these cases are just 10% of the thing, you might allow 
> them to go like:
>   $tool.escape($more.levels.toget.it)
> 
> =:o)
> 
> 
> All this looks simpler to me than tell the template engine when
> to behave different (although an listener/escaper could be passed
> through the context).
> 
> 
> Have fun,
> 
> Paulo Gaspar
> 


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com

Reply via email to