2

我正在尝试为 Java Web 应用程序找到 HTML 模板解决方案。我需要灵活地从我选择的任何来源加载模板,因为它们中的大多数可能位于自定义数据库中。在我的搜索中,我偶然发现了 StringTemplate 4,但是我看到的所有示例都要求用户将模板文件放在磁盘上。

我注意到可以在不指定文件或目录的情况下实例化 STGroup,但是使用 defineTemplate 方法似乎不能替代使用基于文件的模板。不幸的是,在我使用 defineTemplate 进行的所有测试中,我都未能让属性正常工作。这一切感觉就像我在黑暗中猜测。

StringTemplate 是正确的库吗?有没有另一种效果更好的?

我开始考虑开发自己的。

4

2 回答 2

2

我想到了...

import org.stringtemplate.v4.*;
import net.sf.json.*;

class STExampleApp {

        public static void main(String args[]) {
                String template = "decl(type, name, value) ::= \"<type> <name><init(value)>;\"\n"
                                + "init(v) ::= \"<if(v)> = <v><endif>\"";
                STGroup views = new STGroupString(template);
                ST decl = views.getInstanceOf("decl");
                decl.add("type", "int");
                decl.add("name", "x");
                decl.add("value", 12);
                System.out.println(decl.render());
        }

}

无需加载文件。我从中学到了这一点:How to format decimal numbers with StringTemplate (ST) in Java?

于 2012-08-27T19:03:27.883 回答
1

我只需将模板传递给 ST() 构造函数,如下所示:

@Test public void testNullAttr() throws Exception {
    String template = "hi <name>!";
    ST st = new ST(template);
    String expected =
        "hi !";
    String result = st.render();
    assertEquals(expected, result);
}
于 2012-08-28T00:28:51.020 回答