连字符处理 Apache Velocity 2.1 - 这是一个错误吗?
Hyphen Handling Apache Velocity 2.1 - Is this a Bug?
我已经在 Apache Velocity 邮件列表中提出了这个问题,但我没有收到回复,所以我在这里重新发布它...
我正在使用新发布的 Apache Velocity 2.1,我正在测试连字符作为标识符名称,但我遇到了错误或其他问题?我已经设置了 属性 Velocity.PARSER_HYPHEN_ALLOWED 但它只允许用于单个数据而不是地图或集合数据。
我有这个模板:
hello-world.properties.vm
----------------------------------------------------------
Slash: ${sample-slash}
Slash in a Map: ${map.sample-slash}
我有这个示例测试用例:
public class ApacheVelocityTest {
private final String RESOURCES_DIR = "src/test/resources";
@Test
public void testVelocity() {
Path templatePath = Paths.get(RESOURCES_DIR, "templates", "hello-world.properties.vm");
VelocityEngine ve = new VelocityEngine();
ve.setProperty(Velocity.PARSER_HYPHEN_ALLOWED, true);
ve.init();
Template t = ve.getTemplate(templatePath.toString());
VelocityContext context = new VelocityContext();
context.put("sample-slash", "SLASH");
Map<String, String> sampleData = createData();
context.put("map", sampleData);
StringWriter writer = new StringWriter();
t.merge(context, writer);
System.out.println(writer.toString());
}
public Map<String, String> createData() {
Map<String, String> mapData = new HashMap<String, String>();
mapData.put("sample-slash", "USER1");
return mapData;
}
}
现在,第一个 "sample-slash" 已正确呈现,但 java 地图中的呈现不正确..它会抛出如下错误:
org.apache.velocity.exception.ParseErrorException: Encountered "-slash}" at src\test\resources\templates\hello-world.properties.vm[line 5, column 22]
Was expecting one of:
"[" ...
"|" ...
"}" ...
"}" ...
at org.apache.velocity.Template.process(Template.java:154)
嵌入到 java 映射中的对象正在抛出解析器异常。
对于这个开发者,我有什么解决方法吗?非常感谢任何指针。
这是 2.1 版 parser.allow_hyphen_in_identifiers
向后兼容模式的错误。
您可以使用以下解决方法:
$map.get("sample-slash")
或
$map["sample-slash"]
该错误已在主开发分支中修复。
我已经在 Apache Velocity 邮件列表中提出了这个问题,但我没有收到回复,所以我在这里重新发布它...
我正在使用新发布的 Apache Velocity 2.1,我正在测试连字符作为标识符名称,但我遇到了错误或其他问题?我已经设置了 属性 Velocity.PARSER_HYPHEN_ALLOWED 但它只允许用于单个数据而不是地图或集合数据。
我有这个模板:
hello-world.properties.vm
----------------------------------------------------------
Slash: ${sample-slash}
Slash in a Map: ${map.sample-slash}
我有这个示例测试用例:
public class ApacheVelocityTest {
private final String RESOURCES_DIR = "src/test/resources";
@Test
public void testVelocity() {
Path templatePath = Paths.get(RESOURCES_DIR, "templates", "hello-world.properties.vm");
VelocityEngine ve = new VelocityEngine();
ve.setProperty(Velocity.PARSER_HYPHEN_ALLOWED, true);
ve.init();
Template t = ve.getTemplate(templatePath.toString());
VelocityContext context = new VelocityContext();
context.put("sample-slash", "SLASH");
Map<String, String> sampleData = createData();
context.put("map", sampleData);
StringWriter writer = new StringWriter();
t.merge(context, writer);
System.out.println(writer.toString());
}
public Map<String, String> createData() {
Map<String, String> mapData = new HashMap<String, String>();
mapData.put("sample-slash", "USER1");
return mapData;
}
}
现在,第一个 "sample-slash" 已正确呈现,但 java 地图中的呈现不正确..它会抛出如下错误:
org.apache.velocity.exception.ParseErrorException: Encountered "-slash}" at src\test\resources\templates\hello-world.properties.vm[line 5, column 22]
Was expecting one of:
"[" ...
"|" ...
"}" ...
"}" ...
at org.apache.velocity.Template.process(Template.java:154)
嵌入到 java 映射中的对象正在抛出解析器异常。
对于这个开发者,我有什么解决方法吗?非常感谢任何指针。
这是 2.1 版 parser.allow_hyphen_in_identifiers
向后兼容模式的错误。
您可以使用以下解决方法:
$map.get("sample-slash")
或
$map["sample-slash"]
该错误已在主开发分支中修复。