StringTemplate使用listItem

时间:2013-07-30 21:59:26

标签: jar stringtemplate

我正在尝试使用这个简单的示例,这里是示例代码.stg文件

group list-demo;

htmListExample(xmen) ::= <<
Example 5:
<html>
    <body>
    <h1>Original X-Men</h1>
        <ul>
            $xmen:listItem()$
        </ul>
        </body>
    </html>

    >>

    listItem() ::= <<
    <li>$it$</li>
>>

我的Java代码:

STGroup group = new STGroupFile("/myTemplate2.stg",'$','$');
ST template = group.getInstanceOf("htmListExample");
List<String> xmen = Arrays.asList("Jean Gray", "Cyclops");
template.add("xmen", xmen);
System.out.println(template.render().toString());

输出:

 context [/htmListExample] 6:18 passed 1 arg(s) to template /listItem with 0 declared arg(s)
 context [/htmListExample] 6:13 passed 1 arg(s) to template /listItem with 0 declared arg(s)
 context [/htmListExample] 6:13 passed 1 arg(s) to template /listItem with 0 declared arg(s)
 context [/htmListExample /listItem] 2:5 attribute it isn't defined
 context [/htmListExample /listItem] 2:5 attribute it isn't defined
Example 5:
<html>
    <body>
        <h1>Original X-Men</h1>
        <ul>
            <li></li>
            <li></li>
        </ul>
    </body>
</html>

有人可以解释为什么listItem()无法识别吗?我正在使用ST-4.0.7.jar。

由于

1 个答案:

答案 0 :(得分:0)

在StringTemplate 4中,地图运算符:将集合映射到带有一个参数的模板。您需要为it模板声明listItem参数:

listItem(it) ::= <<
<li>$it$</li>
>>

您在输出中看到的警告说:

  1. ST4期望一个带有1个参数的模板,但你传递了listItem,它带有0个参数。
  2. 您没有声明it参数,但是您在listItem内引用了该参数。