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

时间:2013-12-03 22:50:59

标签: java stringtemplate-4

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

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

如果我定义全部或少于为模板someTemplateName定义的属性,那么现在一切正常。现在,如果我尝试添加一个不存在的属性,我会得到以下异常:

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

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

bool isDef = st.isDefined(someAttribute);

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

2 个答案:

答案 0 :(得分:3)

CompiledST个州tokens的文档仅供调试。不确定这意味着什么。

ST template = new ST("Hello <username>, how are you? Using <if(condition)>expression<endif> in condition works, and repeating <username> is not a problem.");
Set<String> expressions = new HashSet<String>();
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

答案 1 :(得分:1)

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