Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which Java MVC frameworks integrate easily with StringTemplate?

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:

  • mentions one solution to integrate with a framework,
  • includes a link to something useful and applicable, like:
    • a tutorial,
    • or documentation,
    • or a reference to source code:
      • free,
      • and open source or public domain.

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.

like image 969
Daniel Jomphe Avatar asked Jan 28 '09 19:01

Daniel Jomphe


4 Answers

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>
like image 141
Jeff Avatar answered Oct 11 '22 08:10

Jeff


A quick search led me to this demonstration of using StringTemplate for a Spring view.

like image 41
yawmark Avatar answered Oct 11 '22 08:10

yawmark


The open source Java WEB framework JPublish, works very well with ST. By following the link above, you'll find there the following:

  • a JPublish framework user guide
  • a practical demo (downloadable from Google code ~5.7MB) showing you how to use ST from JPublish. You'll realize how easy it is.

Have fun,

like image 38
Florin Avatar answered Oct 11 '22 10:10

Florin


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>
like image 36
Bradley Dwyer Avatar answered Oct 11 '22 08:10

Bradley Dwyer