我正在尝试为Java Web应用程序找到HTML模板解决方案。我需要灵活地从我选择的任何来源加载模板,因为大多数来源可能都在自定义数据库中。在我的搜索中,我偶然发现了StringTemplate 4,但是我看到的所有示例都要求用户将模板文件放在磁盘上。
我注意到可以在不指定文件或目录的情况下实例化STGroup,但是使用defineTemplate方法似乎不能替代使用基于文件的模板。不幸的是,在我使用defineTemplate进行的所有测试中,我都无法获得属性。这一切都让我觉得我在黑暗中猜测。
StringTemplate是否适用于此?还有另一个会更好的吗?
我开始考虑开发自己的。
答案 0 :(得分: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?
那里学到的答案 1 :(得分: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);
}