2013-07-30 22 views
0

我试图让简单的例子来工作,这里是示例代码.STG文件StringTemplate的使用的listItem

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

在StringTemplate的4,地图操作:集合映射到它有一个参数的模板。您需要声明it参数为listItem模板:

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

你在输出看到的警告这样说:

  1. ST4有望与1个参数模板,但你通过它listItem这需要0个参数。
  2. 您没有声明it参数,但是您在listItem内引用了它。
+0

是的。而已。我想我正在查找一个老例子。谢谢。 – user2635921