StringTemplate为给定模板定义的属性列表

我开始使用StringTemplate 4,我试图从存储在数据库中的简单字符串创建模板。 我使用这样的东西:

STGroup group = new STGroupString(null, someTemplateString, '$', '$'); ST st = group.getInstanceOf(someTemplateName); st.add(someAttribute, someValue); 

现在一切正常,如果我定义所有或少于为模板someTemplateName定义的属性。 现在,如果我尝试添加不存在的属性,我会收到以下exception:

 no such attribute: fake java.lang.IllegalArgumentException: no such attribute: fake ... 

这是有道理的。 但是,似乎我无法事先知道为模板someTemplateName定义了哪些属性。 我期待找到类似的东西:

 bool isDef = st.isDefined(someAttribute); 

但是没有这样的方法。 我对么? 有没有办法解决?

您可以使用st.impl.formalArguments访问定义参数的Map 。 请注意,对于某些模板,此字段将为null

CompiledST状态tokens的文档仅用于调试。 不确定那是什么意思。

 ST template = new ST("Hello , how are you? Using expression in condition works, and repeating  is not a problem."); Set expressions = new HashSet(); TokenStream tokens = template.impl.tokens; for (int i = 0; i < tokens.range(); i++) { Token token = tokens.get(i); if (token.getType() == STLexer.ID) { expressions.add(token.getText()); } } 

为您提供字符串usernamecondition