It's hard to see how StringTemplate integrates easily (or not) with popular Java web MVC frameworks.
Which Java MVC frameworks integrate easily with StringTemplate?
A good answer:
Readers/Voters, please vote for a solution if you know it's true and great.
In the scope of this question, I am not interested in any other templating engine than StringTemplate.
I've gotten StringTemplate to work with Spring. Basically, all it took was a custom view.
But first, a disclaimer: This is an experimental hack. I've never used this in production code, and it could use some improvement before that happens. I think it is adequate to answer your question about how easily StringTemplate integrates with a Web MVC framework, however.
Reference: Spring Web MVC documentation
StringTemplateView.java:
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.antlr.stringtemplate.StringTemplate;
import org.antlr.stringtemplate.StringTemplateGroup;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.view.InternalResourceView;
public class StringTemplateView extends InternalResourceView {
@Override
protected void renderMergedOutputModel(Map model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// Provides a Spring resource descriptor referring to the .st file
Resource templateFile = getApplicationContext().getResource(getUrl());
// Kind of redundant...
StringTemplateGroup group = new StringTemplateGroup("group", templateFile.getFile().getParent());
StringTemplate template = group.getInstanceOf(getBeanName());
template.setAttributes(model);
// Output to client
PrintWriter writer = response.getWriter();
writer.print(template);
writer.flush();
writer.close();
}
}
And an example view resolver definition:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="myapp.web.view.StringTemplateView"/>
<property name="prefix" value="/WEB-INF/st-views/"/>
<property name="suffix" value=".st"/>
</bean>
A quick search led me to this demonstration of using StringTemplate for a Spring view.
The open source Java WEB framework JPublish, works very well with ST. By following the link above, you'll find there the following:
Have fun,
There is a not bad implementation of StringTemplate as a view for Spring MVC that also supports SiteMesh integration.
https://github.com/tomcz/spring-stringtemplate/
There is an example implementation of a webapp using ST as the view technology within this project (including the sitemesh integration). It is not worth repeating it here, so the pointer to it directly is:
https://github.com/tomcz/spring-stringtemplate/tree/master/src/test/webapp/WEB-INF
The author has also provided support for encoding/escaping output for XSS prevention. This support exists for HTML, CSS, XML, JS and URLs.
If you're a Maven user, the project is available on central
<dependency>
<groupId>com.watchitlater</groupId>
<artifactId>spring-stringtemplate</artifactId>
<version>1.5.1</version>
</dependency>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With