Java StringTemplate 4是否需要磁盘上的模板文件?

Java StringTemplate 4是否需要磁盘上的模板文件?,java,html,web,stringtemplate-4,Java,Html,Web,Stringtemplate 4,我正在尝试为Java web应用程序寻找HTML模板解决方案。我需要从我选择的任何源加载模板的灵活性,因为大多数模板可能位于自定义数据库中。在我的搜索中,我偶然发现了StringTemplate4,但是我看到的所有示例都要求用户将模板文件放在磁盘上 我注意到STGroup可以在不指定文件或目录的情况下实例化,但是使用defineTemplate方法似乎不能替代使用基于文件的模板。不幸的是,在使用defineTemplate进行的所有测试中,我都未能使属性正常工作。这一切感觉就像我在黑暗中猜测 S

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

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

StringTemplate是用于此的正确库吗?还有其他更好的吗

我开始考虑发展我自己。

< P>我明白了……/P>
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());
        }

}
无需加载文件。我从中学到这一点:

我发现了

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

}

无需加载文件。我从:

中学到了这一点,我只需将模板传递给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);
}

我只需将模板传递给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);
}

这也行得通,但我需要多个模板才能嵌套它们。这也行,但我需要多个模板才能嵌套它们。