2014-03-28 2 views
1

배열이 비어 있지 않은 경우 StringTemplate을 사용하여 확인하는 방법은 무엇입니까?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: 

답변

3

그냥 사용

<if(teams)> 

teams 목록이 비어 있으면이 조건은 false로 평가됩니다. StringTemplate 문서에서 :

속성의 유무의 조건식 테스트. 모델과 뷰를 엄격하게 분리하려면 표현식에서 name == "parrt"과 같은 속성 값을 테스트 할 수 없어야합니다. 속성을 설정하지 않거나 null 값의 속성을 전달하면 속성은 false로 평가됩니다. 또한 StringTemplate은 빈 목록 및지도에 대해 false를 반환하고 길이가 0 인 목록 (예 : Interpreter.testAttributeTrue() 참조)과 같은 "빈"반복기도 반환합니다. 다른 모든 속성 은 Boolean 객체를 제외하고는 true로 평가됩니다. Boolean 개체가 해당 개체 값으로 평가됩니다. 엄밀히 말하자면, 이것은 분리 위반이지만 부울 false를 갖는 것은 너무 이상합니다. 객체가 null이 아니기 때문에 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: 
+0

이 does't 작품. Pls 내 질문 업데이트를 확인하십시오. – czerasz

+0

@czerasz 사과, 배열이 아니라 목록이 비어 있으면 false로 평가됩니다. 배열을 목록으로 저장할 수 있습니까? – Sionnach733