Antlr Stringtemplate V4 ArrayList迭代问题

时间:2012-05-02 16:05:25

标签: arraylist loops stringtemplate

继承我在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迭代对象列表以打印字段值 我是以错误的格式/语法使用它吗?

任何帮助/积分都会很有意义

注意:我们使用新的STGroupString(“”,templateGroup,'$','$')将$设置为分隔符;

1 个答案:

答案 0 :(得分:2)

您在表达式上缺少终止$:$ a.age应为$ a.age $