java - STGroupDir 的字符串模板 4 问题

标签 java stringtemplate-4

我们在 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/

相关文章:

java - 在运行时提升 Java 应用程序

java - 我在哪里可以在 Ubuntu 机器上配置 Ant 1.8 的环境变量?

java - StringTemplate 检查数组在 java 中是否为空

java - 有什么方法可以抑制 stringTemplate 中属性 a 未定义错误吗?

java - 有没有办法为需要很长时间的东西编写 Selenium 脚本?

java - 我应该能够在 MS Azure Graph API 中看到动态 DL 吗?

java - MySQL : Update archive table after successful transaction in parent table

stringtemplate - 如何遍历字符串模板 4 映射的键和值?

java - 从字符串模板动态调用函数