我正在尝试使用这个简单的示例,这里是示例代码.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。
由于
答案 0 :(得分:0)
在StringTemplate 4中,地图运算符:
将集合映射到带有一个参数的模板。您需要为it
模板声明listItem
参数:
listItem(it) ::= <<
<li>$it$</li>
>>
您在输出中看到的警告说:
listItem
,它带有0个参数。it
参数,但是您在listItem
内引用了该参数。