Re: Expression Handling Again
Dan Miller <[email protected]> Thu, 22 Sep 2005 11:39:49 -0700 (PDT)
| Newsgroups | gmane.comp.java.webmacro.user |
|---|---|
| Message-ID | <[email protected]> |
That method works great to get the result. One last thing, how come webmacro expressions do not return double. Is that historical? Now that we use a grammar and parser for WM can is it possible to expand expressions? Thanks --- "Eric B. Ridge" <[email protected]> wrote: > Rather than creating a StringMacro, create a > StringTemplate, with a > mini-template of: > #set $foo = $x + 1 > > Then use a custom TemplateVisitor to pull out the > "SetValue" argument > of the #set directive: > > static class MyTemplateVisitor extends > TemplateVisitor { > Object value; > > public Object getValue() { > return value; > } > > public void visitDirectiveArg(String > string, Object object) { > // the #set directive has 2 arguments: > "SetTarget" (LHS) > // and "SetValue" (RHS). We're only > interested in > "SetValue" > if (string.equals("SetValue")) { > value = object; > } > } > } > > So, you're code will be something like: > > public Object evalExpression (Context context, > String expression) { > StringTemplate tmpl = new StringTemplate > (context.getBroker(), > "#set $foo = " + expression); > MyTemplateVisitor visitor = new > MyTemplateVisitor(); > > template.parse(); > template.accept(visitor); > > Object value = visitor.getValue(); > if (value instanceof Maco) { > return ((Macro) value).evaluate(_context); > } else { > return value; > } > } > > Hope this helps. > > eric > > > > > > On Sep 22, 2005, at 12:22 PM, Dan Miller wrote: > > > I guess what I was wondering about was using the > api > > directly stepping in before the #set places the > result > > into the context. I was looking into the src for > > PropertyMethod and trying to figure out how to get > the > > result. > > > > I am using webmacro throughout a webproject, and > would > > like to use similiar webmacro expression in xml > files > > which are read and processed. Thanks > > > > --- Keats Kirsch <[email protected]> wrote: > > > > > >> AFAIK there are only two ways to get something > out > >> of a WM template > >> expansion -- capture the result of the expansion, > or > >> pull something from > >> the context. Actually I suppose you could use > the > >> #bean directive to > >> create a "global" variable and then get it from > the > >> Broker. > >> > >> Maybe if you can explain your requirements we > could > >> think of a way of > >> doing what you want. > >> > >> Keats > >> > >> Dan Miller wrote: > >> > >> > >>> The usage of the StringMacro to use the #set > >>> > >> directive > >> > >>> works great. I was wondering if there is > anything > >>> exposed to evaluate the expression without > >>> > >> modifying > >> > >>> the context. > >>> > >>> This works great, but I would like to leave the > >>> context as is, not adding new temp variables to > the > >>> context. > >>> > >>> Context ctx = new Context(); > >>> ctx.put("val1", 1); > >>> ctx.put("val2", 155); > >>> Macro macro = null; > >>> macro = new StringMacro("#set $val = $val1 + > >>> > >> $val2"); > >> > >>> macro.evaluate( ctx); > >>> Integer val = (Integer)ctx.get("val"); > >>> > >>> > >>> I am looking forward to the 2.0 release. > >>> > >>> > >>> > >> > >> > >> > >> > >> > >> > > > ------------------------------------------------------- > > > >> SF.Net email is sponsored by: > >> Tame your development challenges with Apache's > >> Geronimo App Server. Download > >> it for free - -and be entered to win a 42" plasma > tv > >> or your very own > >> Sony(tm)PSP. Click here to play: > >> http://sourceforge.net/geronimo.php > >> _______________________________________________ > >> Webmacro-user mailing list > >> [email protected] > >> > >> > > > https://lists.sourceforge.net/lists/listinfo/webmacro-user > > > >> > >> > > > > > > > > > > __________________________________ > > Yahoo! Mail - PC Magazine Editors' Choice 2005 > > http://mail.yahoo.com > > > > > > > ------------------------------------------------------- > > SF.Net email is sponsored by: > > Tame your development challenges with Apache's > Geronimo App Server. > > Download > > it for free - -and be entered to win a 42" plasma > tv or your very own > > Sony(tm)PSP. Click here to play: > http://sourceforge.net/geronimo.php > > _______________________________________________ > > Webmacro-user mailing list > > [email protected] > > > https://lists.sourceforge.net/lists/listinfo/webmacro-user > > > > > > ------------------------------------------------------- > SF.Net email is sponsored by: > Tame your development challenges with Apache's > Geronimo App Server. Download > it for free - -and be entered to win a 42" plasma tv > or your very own > Sony(tm)PSP. Click here to play: > http://sourceforge.net/geronimo.php > _______________________________________________ > Webmacro-user mailing list > [email protected] > === message truncated === __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php