【问题标题】:Issue with Antlr Stringtemplate V4 ArrayList iterationAntlr Stringtemplate V4 ArrayList 迭代的问题
【发布时间】:2012-05-02 16:05:25
【问题描述】:

这是我在 java 中的测试

public class person
{
    public String name;
    public int age;
    public String getName() { return name; }
    public int getAge() { return age; }
}

在我的函数中,我创建了许多人对象 并将其添加到列表中

ArrayList<person> arr = new ArrayList<person>()
arr.add(person1);
arr.add(person2); etc etc

在我得到的字符串模板组文件中

test(arr) ::= <<
 <table>
 $arr: {a|
 <tr><td>$a.name$</td><td>$a.age$</td></tr>
 }$
 </table>
>>

这是从我的列表模板中调用的

list (arr) ::= <<

$test(arr)$

... and other page details etc
>>

在第 4 版中,我收到带有一些堆栈跟踪的模板未找到消息,如下所示

Caused by: java.lang.ClassCastException: java.util.ArrayList
at org.antlr.runtime.tree.RewriteRuleTokenStream.nextNode(RewriteRuleTokenStream.java:58)
at org.stringtemplate.v4.compiler.STParser.subtemplate(STParser.java:1563)
at org.stringtemplate.v4.compiler.STParser.mapTemplateRef(STParser.java:3692)

但我可以按如下方式列出一个数组,并以字符串格式打印对象表示 (我也可以使用映射 - 即键值对也可以)

在字符串模板中

test(arr) :: =<<
 <p>
 $arr; seperator="</br>"$
 </p>
>>

我们如何在 V4 中使用字符串模板 grop 迭代对象列表以打印字段值 我是否以错误的格式/语法使用它?

任何帮助/点都会很棒

注意:我们使用 new STGroupString("", templateGroup, '$', '$'); 将 $ 设置为分隔符

【问题讨论】:

  • 现在工作的那种(没有测试所有东西。用带花括号的字符串数组测试)似乎不是字符串模板中的错误..它的 antlr - 不知道这个问题来自哪里我们正在使用 antlr 3.4..运行时。但是当我回滚到 3.2 版时,它起作用了。

标签: arraylist loops stringtemplate


【解决方案1】:

您的表达式中缺少终止 $:$a.age 应该是 $a.age$

【讨论】:

  • 谢谢,当我在 stackoverflow 中输入我的问题时,我错过了一个 $。现在编辑它。仍然无法加载模板(请参阅已编辑的问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多