Java中如何检查数组是否为空 - StringTemplate

3
如何使用StringTemplate检查数组是否为空?
下面的示例无法正常工作:
<if(teams.length > 0)>
  <ul>
    <teams:{team | <li><team></li> }>
  </ul>
<endif>

其他(未工作)示例:

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个回答

5

只需要使用:

<if(teams)>

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

条件表达式测试属性的存在或不存在。模型和视图的严格分离要求表达式不能测试属性值,例如name=="parrt"。如果您没有设置属性或传递空值属性,则该属性计算为false。对于空列表和映射以及0长度列表等“空”迭代器,StringTemplate也返回false(请参见Interpreter.testAttributeTrue())。除了布尔对象以外的所有其他属性都计算为true。布尔对象的情况稍有不同。布尔对象计算为它们的对象值。严格来说,这是一种违反分离的做法,但是如果非空的布尔false对象计算为true,那就太奇怪了。

示例:
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: 

1
@czerasz 抱歉,如果列表为空,则评估结果为false,而不是数组。你能将你的数组存储为列表吗? - Sionnach733

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接