StringTemplate检查java中的数组是否为空

时间:2014-03-28 16:43:58

标签: java stringtemplate stringtemplate-4

如果数组不为空,如何使用StringTemplate检查?

以下示例不起作用:

<if(teams.length > 0)>
  <ul>
    <teams:{team | <li><team></li> }>
  </ul>
<endif>

其他(不工作)Exaple:

String content = "<if(teams)>list: <teams;separator=\", \"><endif>";
ST template = new ST(content);
template.add("teams", new Long[]{123L, 124L});

System.out.println(template.render());

System.out.println("--------");

content = "<if(teams)>list: <teams;separator=\", \"><endif>";
template = new ST(content);
template.add("teams", new Long[]{});

System.out.println(template.render());

输出:

list: 123, 124
--------
list: 

1 个答案:

答案 0 :(得分:4)

只需使用:

<if(teams)>

如果teams列表为空,则此条件将评估为false。 来自StringTemplate文档:

  

条件表达式测试是否存在   属性。严格分离模型和视图需要这样做   表达式无法测试属性值,例如name ==&#34; parrt&#34;。如果你   不要设置属性或传入空值属性,即   属性评估为false。 StringTemplate也返回false   空列表和地图以及&#34;空&#34;迭代器如0长度   列表(请参阅Interpreter.testAttributeTrue())。所有其他属性   除布尔对象外,计算结果为true。布尔   对象评估其对象值。严格来说,这是一个   违反分离,但布尔错误太奇怪了   对象评估为true只是因为它们是非null。

示例:

String content = "1: <if(teams)>list: <teams;separator=\", \"><endif>";
ST template = new ST(content);

// Create a list with two items
List<Long> teams = new ArrayList<Long>();
teams.add(123L);
teams.add(124L);

template.add("teams", teams);

System.out.println(template.render());

// Add separator
System.out.println("--------");

content = "2: <if(teams)>list: <teams;separator=\", \"><endif>";
template = new ST(content);

// Create empty list
teams = new ArrayList<Long>();
template.add("teams", teams);

System.out.println(template.render());

输出:

1: list: 123, 124
--------
2: