Velocity #foreach 컬렉션 및 객체 순회
1. 문자열 List 순회하기
C# 백엔드 코드
List<string> strList = new List<string>() {"dsd","sdfsd","asdfsd","asdfsdfsd"};
context.Put("strList", strList);Code language: C# (cs)
Velocity 템플릿 코드
#foreach($str in $strList)
$str <br/>
#endCode language: PHP (php)
실행 결과: 리스트의 각 문자열을 반복해서 가져오고 줄 바꿈하여 출력합니다.

문법 설명
#foreach(반복변수 in 컬렉션) 로 반복문을 시작하고 #end 로 반복문을 마칩니다.
2. 사용자 정의 엔티티 클래스 List 순회
1. Person 엔티티(C#)
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
public Person(){}
public Person(string name,int age)
{
this.name = name;
this.age = age;
}
}Code language: C# (cs)
2. 백엔드에서 List 구성
List<Person> pList = new List<Person>();
pList.Add(new Person("Jack", 1));
pList.Add(new Person("Ben", 11));
pList.Add(new Person("Kevin", 100));
pList.Add(new Person("Simon", 500));
pList.Add(new Person("Lulu", 20));
context.Put("pList", pList);Code language: PHP (php)
3. 템플릿에서 속성 접근 문법
템플릿 코드:
#foreach($per in $pList)
<tr>
<td>$per.name</td>
<td>$per.age</td>
</tr>
#endCode language: HTML, XML (xml)
❌데이터를 읽어올 수 없습니다! 오류가 발생하거나 빈 화면이 표시됩니다
근본 원리
Velocity 객체 속성 접근 규칙:$per.xxx 는 자동으로 public Get 메서드 GetXxx() 를 찾습니다
$per.name→per.getName()호출 시도$per.age→per.getAge()호출 시도
작성한 엔티티:
- private 필드:
name、age - public 속성은 첫 글자 대문자:
Name、Age,대응 메서드GetName()、GetAge()
✅올바른 템플릿 작성법:
#foreach($per in $pList)
<tr>
<td>$per.Name</td>
<td>$per.Age</td>
</tr>
#endCode language: HTML, XML (xml)
참고: C#은 속성 첫 글자를 대문자로 사용하는 규칙이고 Java 엔티티는 보통 소문자를 사용합니다. 초보자가 자주 실수하는 대소문자 함정입니다.
3. #foreach 내장 변수
반복문 안에서 바로 사용할 수 있는 내장 변수입니다:
| 변수 | 설명 |
|---|---|
$foreach.index | 현재 인덱스, 0부터 시작 |
$foreach.count | 현재 순번, 1부터 시작 |
$foreach.first | 첫 번째 데이터인지 여부(불리언) |
$foreach.last | 마지막 데이터인지 여부(불리언) |
예시:
#foreach($per in $pList)
$foreach.count 、이름:$per.Name
#endCode language: PHP (php)
4. 테이블 출력
<table border="0" cellpadding="0" cellspacing="0">
#foreach($per in $pList)
<tr>
<td>$per.Name</td>
<td>$per.Age</td>
</tr>
#end
</table>Code language: HTML, XML (xml)
정리
#foreach(변수 in 컬렉션)+#end는 Velocity 표준 반복문;- 일반 List 순회 시
$변수를 직접 출력; - 엔티티 객체 순회:
$객체.속성이름대소문자를 정확히 일치시키고 private 필드에 접근하지 마세요; - C# 엔티티 속성은 첫 글자를 대문자로 통일하고 템플릿도 동일하게 작성;
- 데이터가 비어있으면 먼저 속성 대소문자, get 접근자 존재 여부 를 확인하세요.
컬렉션 순회
Previous: 주석
Next: 변수 경계 보충 설명