spring mvc中使用stringtemplate

如果厌倦了JSTL,freemaker,velocity等,可以用下开源的stringtemplate,
地址是:http://www.stringtemplate.org/
它的特点是:,同时支持java,C#,Python,强制使用$...$来作分割符:
并且它很大程度上强制使用MVC分层的技术,来确保V层的单纯.下面是讲解如何
在spring mvc中如何结合使用stringtemplate:

   首先是下载stringtemplate和antrl.jar,放到LIB中,然后代码如下: spring mvc3 REST中的一个注意点

import org.springframework.web.servlet.view.InternalResourceView;
import org.springframework.core.io.Resource;
import org.antlr.stringtemplate.StringTemplateGroup;
import org.antlr.stringtemplate.StringTemplate;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.io.PrintWriter;

public class StringTemplateView extends InternalResourceView {

    @Override
    protected void renderMergedOutputModel(Map model, HttpServletRequest request,
                HttpServletResponse response) throws Exception {

        Resource templateFile = getApplicationContext().getResource(getUrl());

        StringTemplateGroup group = new StringTemplateGroup("webpages", templateFile.getFile().getParent());
        StringTemplate template = group.getInstanceOf(getBeanName());
        template.setAttributes(model);

        PrintWriter writer = response.getWriter();
        writer.print(template);
        writer.flush();
        writer.close();
    }
}
而在配置文件中,设置为:
<?xml version="1.0" encoding="UTF-8"?>
<BEANS class=org.springframework.web.servlet.view.InternalResourceViewResolver xmlns="http://www.springframework.org/schema/beans" viewResolver? xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd>

    <bean id=" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<property name="viewClass" value="com.agilecognition.bookshelf.web.view.StringTemplateView"></property>
<property name="prefix" value="/WEB-INF/templates/"></property>
<property name="suffix" value=".st"></property>
<property name="requestContextAttribute" value="rc"></property>
    </BEAN>
</BEANS>
让SPRING MVC能识别stringtemplate:

接着,组织下模版
WEB-INF
        + templates
                + layout
                        layout.st
                + partials
                        header.st
                        footer.st
                        feedback_form.st
                contact_us.st

首先看下layout.st:
  <html>
    <body>
<DIV class=header>$partials/header()$</DIV>
<DIV class=content>$body$</DIV>
<DIV class=footer>$partials/footer()$</DIV>

    </body>
</html>
可以看到$partials指出了其目录的位置

纯代码创建:
  StringTemplate query = new StringTemplate("SELECT $column$ FROM $table$;");
query.setAttribute("column", "name");
query.setAttribute("table", "User");


加载模版文件
  StringTemplateGroup group = new StringTemplateGroup("mygroup");
StringTemplate st = group.getInstanceOf("cn/ljf/server/templates/page");


缓存:
StringTemplateGroup group = new StringTemplateGroup("myGroup", "/tmp");
group.setRefreshInterval(0);  // no caching
group.setRefreshInterval(Integer.MAX_INT);  // no refreshing


默认的情形,模板文件从磁盘加载的动作只执行一次。开发应用时,关闭缓存机制比较适合。也可能是为了使运行中的网站得到及时的更新。对缓存的控 制,通过SetRefreshInterval()方法实现。倒计时归零是,所有模板都会清空。计时器设置为0表示不适用缓存,设置一个较大的数字,譬如 Integer.MAX_INT或者Int32.MaxValue,则不会刷新。

你可能感兴趣的:(spring mvc中使用stringtemplate)