我们在 java 中使用字符串模板有一段时间了,刚刚升级到字符串模板 4.0.7。
在字符串模板 3.2(我们之前使用的版本)中,我在 src/main/resources
中有一个名为 stringtemplate.st
的字符串模板文件,我们只需有一个组叫我们喜欢的任何东西,因为它似乎没有什么不同,并像这样加载模板:
final StringTemplateGroup group = new StringTemplateGroup("groupName");
final StringTemplate xmlMessage = group.getInstanceOf("stringtemplate");
更新到 4.0.7 后,如果你想加载单个文件,我的理解是你需要有一个 STGroupDir
对象,其中包含模板所在文件夹的名称。
所以,我将 stringtemplate 文件移动到 src/main/resources/templates
并将上面的代码更改为:
final URL url = Thread.currentThread().getContextClassLoader().getResource("templates");
final STGroup group = new STGroupDir(url.getPath(), '$', '$');
final ST xmlMessage = group.getInstanceOf("stringtemplate");
然后当我尝试填充字符串模板时,这会导致抛出一个空指针,而且似乎找不到任何模板。
我的理解是,传递给 STGroupDir 构造函数的字符串应该是模板文件所在的目录,如果在那里找不到模板文件,无论如何都会搜索类路径。 我从根本上误解了什么吗?关于我做错了什么有什么建议吗?
最佳答案
很抱歉这么快就回答了我自己的问题,但看来我在 .st 文件中的语法有误。我在顶部声明了参数,但我没有意识到示例中的 x 表示文件名。 所以,我有:
x(message) ::= <<
<?xml version="1.0" encoding="UTF-8"?> ...
>>
我将其替换为:
stringtemplate(message) ::= <<
<?xml version="1.0" encoding="UTF-8"?> ...
>>
它奏效了。 感谢this question的回答帮助我解决问题。
关于java - STGroupDir 的字符串模板 4 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056128/