3

我们在 java 中使用字符串模板已经有一段时间了,刚刚升级到字符串模板 4.0.7。

在字符串模板 3.2(我们之前使用的版本)中,我有一个名为stringtemplate.stin的字符串模板文件src/main/resources,我们只是有一个名为任何我们喜欢的东西的组,因为它似乎没有什么区别,并像这样加载模板:

    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 构造函数的 String 应该是模板文件所在的目录,如果在那里找不到模板文件,无论如何都会搜索类路径。我从根本上误解了什么吗?关于我做错了什么的任何建议?

4

1 回答 1

2

很抱歉这么快就回答我自己的问题,但看来我的 .st 文件中的语法有误。我已经在顶部声明了参数,但我没有意识到示例中的 x 表示文件名。所以,我有:

x(message) ::= <<
   <?xml version="1.0" encoding="UTF-8"?> ...
>>

我将其替换为:

stringtemplate(message) ::= <<
   <?xml version="1.0" encoding="UTF-8"?> ...
>>

它奏效了。感谢这个问题的答案帮助我解决了这个问题。

于 2014-06-05T09:39:40.277 回答