哪些Java MVC框架可以轻松集成StringTemplate?

17

很难看出 StringTemplate 如何轻松(或不容易)与流行的Java Web MVC框架集成。

哪些Java MVC框架可以轻松地与StringTemplate集成?

一个好的答案:

  • 提到一种与框架集成的解决方案
  • 包括一个有用和适用的链接,例如:
    • 一个教程
    • 文档
    • 或指向源代码的引用:
      • 免费
      • 并且是开源的公共领域的

读者/投票者,如果您知道它是真实而伟大的,请投票支持该解决方案。

在这个问题的范围内,我对比StringTemplate不感兴趣的任何其他模板引擎。


1
很棒的问题!Terrence是个天才,但他还有点学术。StringTemplate没有得到应有的关注,主要是因为(据我所知)没有框架采用它。 - erickson
真是难以置信,StringTemplate竟然不再地图之内。这个问题已经提出了20个小时,现在已经被淹没了 - 没有官方的集成解决方案...看起来我们需要帮助ST在MVC中获得可追溯的存在感。 - Daniel Jomphe
嗨呀!是的,如果没有一个大型框架包装它,ST将永远不会被广泛知晓。然而,在制作jguru服务器之后,我开始厌恶建站了。我很遗憾无法改善这种情况。非常高兴听到人们喜欢它。我认为它做了正确的事情,因此具有影响力,但是...由于ANTLR,ST在代码生成和翻译领域广为人知。 - Terence Parr
我认为你可以将它适配到大多数框架中。我正在使用slim3。我的做法是,不再从Servlet转发到JSP文件,而是渲染一个模板。在slim3中,这是在Controller类中完成的。到目前为止,我已经完全从项目中淘汰了JSP。 - JR Lawhorne
5个回答

11

我已经让StringTemplate与Spring一起工作了。基本上,只需要一个自定义视图。

但首先,免责声明:这是一个实验性的hack。我从未在生产代码中使用过它,并且在此之前它可能需要改进。然而,我认为它足以回答你的问题,即StringTemplate如何轻松地集成到Web MVC框架中。

参考:Spring Web MVC文档

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();
    }
}

以下是一个示例视图解析器的定义:

<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>

+1. 我注意到这段代码的一个问题是,如果你的模板位于/WEB-INF/st-views/的子目录中,它将无法工作。我最终采取的解决方法是使用getUrl().substring(0, getUrl().indexOf(getBeanName()))重构“prefix”,并在getResource()调用中使用它。此外,在实例化StringTemplateGroup()时,我放弃了getParent()调用。 - Steve Kalemkiewicz

2

1

有一个不错的StringTemplate实现作为Spring MVC的视图,还支持SiteMesh集成。

https://github.com/tomcz/spring-stringtemplate/

在这个项目中,有一个使用ST作为视图技术的Web应用程序示例实现(包括sitemesh集成)。在此不值得重复,因此直接指向它的指针是:

https://github.com/tomcz/spring-stringtemplate/tree/master/src/test/webapp/WEB-INF

作者还提供了编码/转义输出以防止XSS攻击的支持。该支持适用于HTML、CSS、XML、JS和URL。
如果您是Maven用户,该项目可在中央库中获取。
<dependency>
  <groupId>com.watchitlater</groupId>
  <artifactId>spring-stringtemplate</artifactId>
  <version>1.5.1</version>
</dependency>

1

开源Java WEB框架JPublish与ST非常兼容。通过上面的链接,您会发现以下内容:

  • JPublish框架用户指南
  • 一个实用演示(可从Google code下载,大小约5.7MB),向您展示如何使用JPublish中的ST。您会意识到它是多么简单易用。

祝您玩得愉快!


0
某人Harry Karamidas 分享,在2008年12月,在ST官方网站上发布了一个Struts适配器。直接链接到zip文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接