[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