如果数组不为空,如何使用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:
答案 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: