Lol... you beat me to giving the solution. It's indeed dead simple. And Franscesco is right about ST only supporting javabeans style access. I had a similar issue in the past passing javascript objects from flowscript to jxtemplate generator.
So I ended up extending the native JS Object with some methods like values() and keys() which are iterable. And of course a Map has the same methods enabling you to get an enumerable of keys/ values or entries. http://robbypelssers.blogspot.nl/2010/10/creating-higher-order-functions-in.html Robby -----Original Message----- From: André Juffer [mailto:[email protected]] Sent: Friday, October 05, 2012 11:15 AM To: [email protected] Subject: Re: [C3] Sting template, passing argument to method I got this problem solved. As the DTO holds the requested information as a Map, I added one method that returns a Set<Map.Entry<String, String>>. With ST it is easy to iterate: <tribc:socials> $statistics.socialEventParticipation: { entry | <tribc:social> <tribc:name>$entry.key$</tribc:name> <tribc:number>$entry.value$</tribc:number> </tribc:social> }$ </tribc:socials> On 10/05/2012 09:30 AM, Francesco Chicchiriccò wrote: > On 04/10/2012 08:53, André Juffer wrote: >> Hello, >> >> I am dealing with the following problem. A REST resource returns an >> (DTO) object called statistics (of type Statistics) holding various >> properties. With string template, each property can be inserted into >> an XML file, like >> >> <A>$statistics.propertyA$</A> >> >> where the corresponding method on the Statistics object is >> getPropertyA(). >> >> One of the properties requires an argument of type String, where the >> actual method signature is getNumberFor(String name). It returns an >> int. The name is obtained from a list of names obtained from the >> statistics objects as well. The idea is to iterate through the list >> of names and return a number (int) for each name. >> >> Thus, the XML code that I try to complete looks like: >> <socials> >> $statistics.names: { name | >> <social> >> <name>$name$</name> >> <number>$statistics.numberFor(name)$</tribc:number> >> </social> >> }$ >> </socials> >> >> The Statistics object holds among other things a Map<String, Integer> >> with the requested numbers. >> >> The line $statistics.numberFor(name)$ is however erroneous. I cannot >> pass the current value of name to the method in question. >> >> My question is now: How to pass a argument to a given method on an >> object using string template. The string template website did not >> give a clear answer, so maybe it is not even possible, or maybe I >> just completely overlooked it. >> >> Any help is appreciated. > > Hi André. > I am not an ST expert at all, but I really think there is no support > for generic method invocation on ST expressions: the only methods > supported seem to ne related to properties, "à la JavaBean". > > For your use case, I'd change a bit the application logic by providing > a > C3 REST controller that would act as a "data conversion proxy" between > the sitemap and the actual REST resource you are currently dealing with. > In this way you could query the external REST resource from the C3 > REST controller body and prepare the data in a format that's suitable for ST. > > Regards. > -- Andre H. Juffer | Phone: +358-8-553 1161 Biocenter Oulu and | Fax: +358-8-553-1141 Department of Biochemistry | Email: [email protected] University of Oulu, Finland | WWW: www.biochem.oulu.fi/Biocomputing/ StruBioCat | WWW: www.strubiocat.oulu.fi Triacle Biocomputing | WWW: www.triacle-bc.com --------------------------------------------------------------------- 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]
