[stringtemplate-interest] Does StringTemplate support components?
Adam Bennett
adamb at videx.com
Wed Dec 27 10:09:41 PST 2006
Interesting. Although I am beginning to doubt my componentization approach I'll file this one away for when I finally make up my mind. Thanks, Nate.
_____
From: Nate [mailto:misc at n4te.com]
To: Adam Bennett [mailto:adamb at videx.com]
Cc: stringtemplate-interest at antlr.org
Sent: Wed, 27 Dec 2006 08:23:17 -0800
Subject: Re: [stringtemplate-interest] Does StringTemplate support components?
You can subclass StringTemplateGroup and override
loadTemplateFromBeneathRootDirOrCLASSPATH to intercept template lookups.
You could switch on the name and configure different templates a certain
way. This way the templates are configured by Java code even if included
through other templates. I think this is what you were getting at. I'm
not sure this is better than the monolithic approach, but it is possible.
-Nate
Adam Bennett wrote:
> I really appreciate all the suggestions but I haven't heard the answer
> yet. I'll try to reformulate my the question:
>
> Question 1) From my reading, it appears that StringTempate supports
> calling other templates as if it were a subroutine, right? I infer
> this from the "Expressions" document where it is talking about
> "Template References":
>
> "the enclosing page template would automatically create an instance of
> the referenced template and insert it"
>
> What I am focusing on here is "automatically create an instance".
> Beautiful. Less coding.
>
> Question 2) The documentation goes on to describe 2 ways of getting
> the necessary attributes to the subroutine template.
> 1) "Accessing Attributes Of Enclosing Template"
> 2) "Passing Parameters To Another Template"
>
> Are there any other ways? You see, what I am looking for is a way to
> help the web designers work independently of the programmers. Here's
> a scenario to describe what I mean. Let's say that our web
> application handles the URL "/OurWebApp/account/summary.page" with
> Java code like this:
>
> StringTemplate st = group.GetInstanceOf("account/summary.st");
> ... do some database queries
> st.setAttribute("foo", queryResult1);
> st.setAttribute("bar", queryResult2);
> ... render the template and send it to the client browser
>
> The above code is maintained by the programmers. The web designers
> can tweak the template text to their hearts content. Initially it
> looks like:
> <html>
> <body>
> ...
> $foo$
> $bar$
> ...
> </body>
> </html>
>
> But wait! The web designer is changes her [artistic] mind and decides
> to take the summary page the next level. She wants to show the users
> account balance so she makes a call to the accountBalanceBox template.
> <html>
> <body>
> ...
> $foo$
> $bar$
> $accountBalanceBox()$
> ...
> </body>
> </html>
>
> But accountBalanceBox needs a $dollars$ attribute. This can only be
> determined by getting the user ID from the HttpSession and then
> querying the database for it. But that's the job of the programmer.
> If we have support for true componentization then the Java code that
> handles summary.page should NOT need to set the $dollars$ attribute.
> The general principle here is separation of concerns
> (http://en.wikipedia.org/wiki/Separation_of_concerns). If
> accountBalanceBox is made to be a logical component, which includes
> both a template as well as some Java code, it gives web designers full
> freedom to mix and match the components that have been provided by the
> programmers.
>
> So I think the mechanism I am after is some sort of hook. As
> StringTemplate encounters accountBalanceBox it calls my Java function
> which gives me a chance to provide the necessary attributes. Such a
> hook might look like this:
>
> void templatePreprocess(StringTemplate st, StringTemplateContext context)
> {
> if (st.getName().equals("accountBalanceBox"))
> {
> HttpSession session = context.getAttribute("session");
> int userID = session.getAttirbute("userID");
> st.setAttribute("dollars", database.getBalance(userID));
> return;
> }
> ...
> }
>
> Does such a mechanism exist?
>
> Thanks much.
> - Adam
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> stringtemplate-interest mailing list
> stringtemplate-interest at antlr.org
> http://www.antlr.org:8080/mailman/listinfo/stringtemplate-interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org:8080/pipermail/stringtemplate-interest/attachments/20061227/dde76c44/attachment.html
More information about the stringtemplate-interest
mailing list