【问题标题】:Does StringTemplate 4 require template files on disk?StringTemplate 4 是否需要磁盘上的模板文件?
【发布时间】:2012-08-22 06:32:12
【问题描述】:

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

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

StringTemplate 是适合这个的库吗?还有其他更好的吗?

我开始考虑开发自己的。

【问题讨论】:

    标签: java html web stringtemplate-4


    【解决方案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);
    }
    

    【讨论】:

    • 这也可以,但我需要多个模板以便嵌套它们。
    【解决方案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?

    了解到这一点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      相关资源
      最近更新 更多