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

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

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

一个很好的答案:

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

读者/选民,如果你知道它是真实和伟大的,请投票支持解决方案。

在这个问题的范围内,除了StringTemplate之外,我对任何其他模板引擎都不感兴趣


答案 1

我已经让StringTemplate与Spring合作。基本上,它所需要的只是一个自定义视图。

但首先,免责声明:这是一个实验性的黑客攻击。我从未在生产代码中使用过它,在此之前,它可能需要一些改进。但是,我认为这足以回答您关于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>

答案 2

推荐