I am getting started with StringTemplate 4 and I am trying to create a template from a simple string stored in a database. I use something like this:
STGroup group = new STGroupString(null, someTemplateString, '$', '$');
ST st = group.getInstanceOf(someTemplateName);
st.add(someAttribute, someValue);
Now everything works fine if I define all or less than the attribute defined for the template someTemplateName
. Now if I try to add an attribute that doesn't exist, I get the following exception:
no such attribute: fake
java.lang.IllegalArgumentException: no such attribute: fake
...
which makes sense. However, it seems like there's no way for me to know beforehand which attributes are defined for the template someTemplateName
. I was expecting to find something like:
bool isDef = st.isDefined(someAttribute);
but there's no such method. Am I correct? Is there any way around this?
You can use
st.impl.formalArguments
to access theMap<String, FormalArgument>
where the arguments are defined. Note that for some templates this field will benull
.