You can indeed do what you are asking, I am currently doing this. 

Just build an object or a "tool" with the following method.

Here is what I put into my velocity macro to test it...

$vsesstool is a tool that I created (see the docs...)

Tony

#set ($myExpr =  '$row.getColumn("pl_product_line_description")')
$myExpr
$vsesstool.evalExpression($data,$myExpr)

 
public static String evalExpression (RunData data, String expression) {

                Context context = TurbineVelocity.getContext(data);

                StringBuffer content = new StringBuffer();

                BufferedReader in = null;

                try {

                        /* this approach makes use of the oreilly.jar file */
                        in = new BufferedReader(new StringReader(expression));
                        StringWriter writer = new StringWriter();
                        Velocity.evaluate(context, writer, "INFO", in);
                        content.append(writer.toString());

                }
                catch (Exception e) {
                        // something went wrong
                }
                finally {
                        if (in != null) {
                                try {
                                        in.close();
                                }
                                catch (Exception e) {
                                        // something else went wrong
                                }
                        }
                }

                return content.toString();

        }
-----Original Message-----
From: news [mailto:[EMAIL PROTECTED] On Behalf Of BoD
Sent: Wednesday, March 29, 2006 11:15 AM
To: [email protected]
Subject: Re: Expression evaluation inside a template?

Thank you for your answer.

I'm not sure I was completely clear so I'll give a more precise example 
of what I'm trying to do.

Let's say I have a tool that has a method createObject().
This method returns an object that has a getProp() method returning 
"hello".
The tool also has a method getExpression() returning the string 
"$obj.getProp()".

I'm trying to make a velocimacro that given this:

#set ($obj = $myTool.createObject())
#set ($expr = $myTool.getExpression())
#myMacro($expr)

Would generate this:

hello


So I would need something like eval($expr) that would evaluate the 
content of $expr which is $obj.getProp(). Obj being declared before it 
would call the method and return "hello".

I have no idea on how to create such a macro or if it is possible.

Thank you very much for your help.

BoD



Tony Oslund a écrit :
> If you read the Velocity docs you will find that it encourages you to
> access methods on your objects rather than trying to access a property
> directly.
> 
> Try doing $x.getValue(), or $y.doSomething() rather than attempting to
> do x.myalue.
> 
> Along the same lines, if you are tempted to use arrays, use an ArrayList
> with Velocity instead.
> 
> It is possible to access a method on an object within a Velocity
> template that in turn returns the contents of another velocity template,
> and so on and so on.  I currently use this to handle language
> translation, managed content, and also reusable sections of web pages.
> 
> If you are truly looking for expression evaluation.  There is an open
> source java library called beanshell.  It allows you to eval a java
> expression.  I have used it behind the scenes to perform Boolean
> evaluation of string expressions like {X} or {Y} and not {Z}, etc.  It
> works very well.
> 
> -----Original Message-----
> From: news [mailto:[EMAIL PROTECTED] On Behalf Of BoD
> Sent: Wednesday, March 29, 2006 8:56 AM
> To: [email protected]
> Subject: Expression evaluation inside a template?
> 
> Hi!
> 
> In a template, is there a way to evaluate a Velocity expression inside a
> 
> variable ?
> For example, let's say I have set in a Java screen a variable "expr" 
> with the value "$myObj.prop" in the context.
> 
> Now I'd like to evaluate the expression represented by $expr when I'm in
> 
> the template. Is there any way to do that, something like eval($expr)?
> 
> Thank you very much for your help!
> 
> BoD
> 
> 
> ---------------------------------------------------------------------
> 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]

Reply via email to