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: 
4

1 回答 1

5

只需使用:

<if(teams)>

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

条件表达式测试属性的存在与否。模型和视图的严格分离要求表达式不能测试 name=="parrt" 等属性值。如果您未设置属性或传入空值属性,则该属性的计算结果为 false。StringTemplate 还为空列表和映射以及“空”迭代器(例如 0 长度列表)返回 false(请参阅 Interpreter.testAttributeTrue())。除布尔对象外,所有其他属性的计算结果都为真。布尔对象评估为其对象值。严格来说,这违反了分离,但是仅仅因为布尔假对象是非空的,就让布尔假对象评估为真太奇怪了。

例子:

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: 
于 2014-03-28T17:03:06.860 回答