Hi Jeff,

Now I get it.  If you built a simpler tag that always stored a String
object this would be easy-- just use Velocity.evaluate as I suggest.
But you want to evaluate an expression to a resulting object.

Seems to me that you want this to act similar to the Velocity #set.
You might start by looking at the class
o.a.v.runtime.parser.node.ASTSetDirective.  The key line is:

       Object value = right.value(context);

which evaluates the right hand side of the #set expression.

One way of approaching this is to consider that Velocity.evaluate()
basically ends up calling Node.render() which is a recursive series of
parser nodes that output to a Writer.  You need a similar starting
point to call Node.value() which will recursively evaluate an
expression.

Just a few quick thoughts, hope they point you in a useful direction...

WILL

On 8/19/06, Jeff Schnitzer <[EMAIL PROTECTED]> wrote:
I'm just evaluating Velocity expressions.  The result of the expression
should be an object, whereas Velocity.evaluate() renders output to a
Writer as text.  The method I'm looking for would look something like this:

public Object evaluate(Context ctx, String expression);

For example:

ctx.put("now", Calendar.getInstance());
TimeZone tz = (TimeZone)evaluate(ctx, "now.timeZone");

The Introspector seems to be much, much lower level than this.

Thanks,
Jeff

Will Glass-Husain wrote:
> Not sure I get it.  Are you making a new expression language or just
> evaluating Velocity expressions?
>
> The introspector is what resolves objects and methods in Velocity.
>
> WILL
>
> On 8/19/06, Jeff Schnitzer <[EMAIL PROTECTED]> wrote:
>> Velocity.evaluate() renders textual output to a Writer.  For the
>> expression language to work, I need to resolve objects.  I can't find
>> anything in the javadocs that might give me a hook.
>>
>> Any suggestions?
>>
>> I know, I need to wade through the code, but a few starting pointers
>> would help.
>>
>> Thanks,
>> Jeff
>>
>>
>> Will Glass-Husain wrote:
>> > Wow!  As a both a Velocity enthusiast and JSTL junkie that sounds like
>> > a really useful tag.
>> >
>> > It doesn't sound that hard to me.  Extract the expression, call
>> > Velocity.evaluate, and set the request attribute.  I guess you'd have
>> > to set up the context with all the beans first.
>> >
>> > WILL
>> >
>> >
>> > On 8/17/06, Jeff Schnitzer <[EMAIL PROTECTED]> wrote:
>> >> Short version:  I wish for a JSP custom tag that will effectively
>> let me
>> >> use Velocity expressions instead of the anemic JSTL expressions.
>> >>
>> >> Long version:
>> >>
>> >> Velocity already has a custom JSP tag that lets me do this:
>> >>
>> >> <vel:velocity>
>> >>     #if(true) cool velocity stuff #end
>> >> </vel:velocity>
>> >>
>> >> However, what I really really want is something that lets me use
>> >> velocity expressions the way I would use JSTL expressions.  The most
>> >> important is this:
>> >>
>> >> <vel:set var="foo" value="${cool.velocity(syntax)}" />
>> >>
>> >> The inability of JSTL expressions to call arbitrary java methods
>> results
>> >> in muchhacking and hair pulling.  Velocity expressions rock.  I want
>> >> them :-)
>> >>
>> >> How hard would it be to make a <vel:set> tag?  I looked around the
>> APIs
>> >> but couldn't find anything helpful.
>> >>
>> >> Thanks,
>> >> Jeff
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >> For additional commands, e-mail: [EMAIL PROTECTED]
>> >>
>> >>
>> >
>> >
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
Forio Business Simulations

Will Glass-Husain
[EMAIL PROTECTED]
www.forio.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to