On 05/10/2012 10:59, gelo1234 wrote: > > Is there any reasonable benefit from using ST in "transform layer" ? I > tend to believe that C2/C3 authors overly favor ST templates in the > whole C architecture. Does it stem from the mere fact that ST is > deadly simple/fast to compute (transform data) while being very > general-purpose ? Or is there any other reason ? In my opinion ST is > pretty exotic, i mean it is neither any valid standard, nor seen in > any favorable (Java EE) technology stack. > > As this case shows, its not a valid engine for general-purpose problems. > Im not giving here the alternatives yet, because i would like to hear > first the reasons behind choosing ST as a preferable template engine > in C2/C3.
AFAIK, ST is not "preferred", it's barely the only one available so far in C3. And I don't remember ST to be available at all in C2.1 and C2.2. C2.1 and C.2.2 have instead a wider range of supported template engines, including JX (my favorite) [1] [2]. If you'd like to port JX (or any other templating engine) to C3, your contribution is more than welcome. Best regards. [1] http://cocoon.apache.org/2.2/blocks/template/1.0/976_1_1.html [2] http://cocoon.apache.org/2.2/blocks/template/1.0/1012_1_1.html > 2012/10/5 Francesco Chicchiriccò <[email protected] > <mailto:[email protected]>> > > 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. > -- Francesco Chicchiriccò ASF Member, Apache Cocoon PMC and Apache Syncope PPMC Member http://people.apache.org/~ilgrosso/
