Hi! I don't think adapting Tapestry's template engine to support templating JSON is a good idea. It was built to output HTML and XML and nothing else. Is there anything else that does what you want? Why not using a generic template engine like FreeMarker or, better yet, use some Java JSON mapper like Jackson? I do see the point of implementing some Java class to Tapestry JSON object mapper, but as a template, I see none, I'm sorry. If you want to implement it, go ahead. :)
Regarding reflection, the Tapestry BeanModel classes, which are now in a separate JAR and can be used without tapestry-core, are very fast and does caching of everything got by reflection, so they're a solid foundation for doing what you want. On the other hand, supporting PUT and DELETE HTTP methods in Tapestry pages is something I had some thoughts over time. On Tue, Apr 18, 2017 at 12:11 PM, Qbyte Consulting < qbyteconsult...@gmail.com> wrote: > Hi, > > Would it be feasible or indeed sensible(?) to convert/adapt Tapestry to > render JSON? > > Page classes would provide API endpoints and unpack params and body content > to properties and the templates would have JSON instead of TML. I'd also > want to modify the tapestry tags (t:if t:loop etc) to something much more > simple and JSONesque. > > The page classes would support the GET/POST/PUT and so forth by convention. > I also envisage being able to filter, resort and augment responses through > an execution chain. > > i.e: a JSON template > > { > "id": $, > ?"name": $, > <prices id='$' orderBy='ASC'>, > "tags": [$]} > > > $ would call corresponding getter methods e.g. getId, getTags etc.. > ? would invoke hasName and render the name value if true > <> would embed components - <prices...> could render "prices" : [1,2,3], > > I'd like to harness Tapesty to emit JSON from rendering char streams > instead of having to use concrete domain classes that have to be reflected > and such as per JAXB and other similar frameworks that seem to make a meal > of JSON. I'd like plastic to convert the template into stream emitter > methods that are called transparently in the plastic classes. Hiding the > boilerplate code > > I like the idea of writing the JSON template myself, it's clearer more > flexible and can stream and follows the ethos of Tapestry. Reflection must > slow the rendering down a lot. > > Is this crazy, any thoughts? I want to have flexibility and write minimum > code, and max reuse things Tapestry is good with. > > John > -- Thiago