[stringtemplate-interest] Angel brackets and HTML/XML
Leo R. Lundgren
leo at finalresort.org
Sun Mar 7 14:14:15 PST 2010
I found the anser to why <!DOCTYPE ...> gave an error. It is obviously
because of the comment syntax in ST (<! .. !>).
I did find another thing that is missing in the Five Minute
Introduction, namely the <(expr)(argument-list)>. It's not in the list
of expressions. Maybe it could be added at the same time that the text
regarding which delimiter type is default in ST is adjusted.
However, I am still getting "problem parsing template 'index'", when
the template I try to use is:
\<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd
">
<html lang="sv-SE">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<h2>Hello <name></h2>
<button id="uploadButton">Upload file</button>
</body>
</html>
(I added the \ before the DOCTYPE in order to stop the previously
mentioned error.)
After some further testing I presume that it's simply not viable to
use <..> for HTML/XML templates. It seems that ST tries to parse all
tags, and leaves them blank when then it doesn't find a valid attribute.
Thanks,
// Leo
7 mar 2010 kl. 16.17 skrev Leo R. Lundgren:
> Hello,
>
> I just started trying out ST and it seems really nice. But I
> encountered an issue when using <..> as delimiters in a HTML template.
> I've been searching and reading but can't find a clear explanation as
> to why this is happening, and if there is a workaround.
>
>
> In short; my template looks like this:
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd
> ">
>
> <html lang="sv-SE">
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
> <title>Test</title>
> </head>
> <body>
> <h2>Hello <name></h2>
> <button id="uploadButton">Upload file</button>
> </body>
> </html>
>
>
> And my Java code like this:
>
> protected void doGet(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
> String templatePath = getServletContext().getRealPath("/WEB-INF/
> view");
> StringTemplateGroup group = new StringTemplateGroup("view",
> templatePath, AngleBracketTemplateLexer.class);
> group.setRefreshInterval(0);
>
> StringTemplate view = group.getInstanceOf("index");
> view.setAttribute("name", "World");
>
> PrintWriter out = response.getWriter();
> out.write(view.toString());
> }
>
>
> When requesting the page, i get this exception:
>
> problem parsing template 'index'
> line 12:6: expecting '!', found 'l'
> at
> org
> .antlr
> .stringtemplate
> .language
> .AngleBracketTemplateLexer.nextToken(AngleBracketTemplateLexer.java:
> 149)
> at antlr.TokenBuffer.fill(TokenBuffer.java:69)
> at antlr.TokenBuffer.LA(TokenBuffer.java:80)
> at antlr.LLkParser.LA(LLkParser.java:52)
> at
> org
> .antlr
> .stringtemplate.language.TemplateParser.template(TemplateParser.java:
> 103)
> at
> org
> .antlr
> .stringtemplate
> .StringTemplate.breakTemplateIntoChunks(StringTemplate.java:850)
> at
> org
> .antlr.stringtemplate.StringTemplate.setTemplate(StringTemplate.java:
> 441)
> at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.defineTemplate(StringTemplateGroup.java:679)
> at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.loadTemplate(StringTemplateGroup.java:553)
> at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.loadTemplate(StringTemplateGroup.java:629)
> at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup
> .loadTemplateFromBeneathRootDirOrCLASSPATH(StringTemplateGroup.java:
> 597)
> at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.lookupTemplate(StringTemplateGroup.java:480)
> at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.getInstanceOf(StringTemplateGroup.java:392)
> at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.getInstanceOf(StringTemplateGroup.java:404)
> ...
>
>
> Apparently the problem is the first line in the template, where
> there's a ! in the first tag.
> But even if I remove the ! (not valid, I know, just for testing) I get
> the parsing error (only the "problem parsing template 'index'" message
> and stacktrace).
> If I remove everything above the <h2> line, I get output.
> In any case, if I use $$ notation instead of <..>, everything works.
>
> So, is possible to use <..> when making HTML or XML templates, without
> getting errors like this, or is it not recommended?
>
> The reason I'm even considering <..> is because the Five Minute
> Introduction says they are the standard delimiters since version 2.3.
> However, on the "Setting the expression delimiters" page in the wiki,
> it says the opposite.
> It seems to me that the latter is correct, can someone verify?
>
> In any case, I think <..> looks slightly cleaner than $$ all over the
> place, but it certianly does clash with the tags in general, so maybe
> it's better to skip them.
More information about the stringtemplate-interest
mailing list