[stringtemplate-interest] Maps vs aggregates vs beans
Robert Rowland
robertdavidrowland at gmail.com
Thu Jul 27 00:55:58 PDT 2006
If you only have one hashmap and your template was as follows it would
work fine.
StringTemplate t = new StringTemplate("<b>$name.a$ - $name.b$</b>");
So something is behaveing differently depending depending on whether
you a single hashmap or multiple hashmaps set for a given attribute.
I'm guessing this is intended behaviour but others will know the
answer to that better than me.
In situations where you may have 1 or more hashmaps then this is the
work around I've used.
StringTemplate t = new StringTemplate("$name:{n|$if(n)$<b>$it.a$ -
$it.b$</b>$endif$}$");
Then after I've set my 1 or more hashmaps, I go and set an empty one
as well, which is ignored because of the $if(n)$
while(myloopmaybe_0_1_or_many_items) {
Hashmap name = new Hashmap();
name.put("a", "first value");
name.put("b", "second value");
template.setAttribute("name", name);
Hashmap name = new Hashmap();
template.setAttribute("name", name);
On 7/27/06, Steven Byrnes <erewhon at flatland.org> wrote:
> Hi,
>
> I'm running into a problem with aggregates and multi-valued attributes. Not sure if it's lack of
> understanding on my part or something else... I'm running String Template 2.3b7.
>
> For the following template:
>
> StringTemplate t = new StringTemplate("$name:{ <b>$it.a$ - $it.b$</b> }$");
>
> if I use 1 or more aggregate attribute calls, it works, e.g.:
>
> t.setAttribute("name.{a,b}", "foo", "blah");
> t.setAttribute("name.{a,b}", "bar", "brap");
>
> same thing for a simple bean. One or more setAttributes() will work.
>
> t.setAttribute("name", new data("foo", "bar")); // where data() has getA() and getB() methods
>
> If I use setAttribute() for multiple Hashmaps, it works. But if I only use one, I get an error, e.g.:
>
> HashMap<String,String> m = new HashMap<String,String>();
> m.put("a", "foo"); m.put("b", "blah");
> t.setAttribute("name", m);
> System.out.println(t.toString());
>
> =>
>
> Class java.lang.String has no such attribute: a in template context [anonymous anonymous]
> java.lang.NoSuchFieldException: a
> at java.lang.Class.getField(Class.java:1507)
> at org.antlr.stringtemplate.language.ASTExpr.rawGetObjectProperty(ASTExpr.java:410)
> at org.antlr.stringtemplate.language.ASTExpr.getObjectProperty(ASTExpr.java:314)
> ....
>
> Any ideas?
>
> Thanks,
> Steven
> _______________________________________________
> stringtemplate-interest mailing list
> stringtemplate-interest at antlr.org
> http://www.antlr.org:8080/mailman/listinfo/stringtemplate-interest
>
More information about the stringtemplate-interest
mailing list