컬렉션 순회

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.nameper.getName() 호출 시도
  • $per.ageper.getAge() 호출 시도

작성한 엔티티:

  • private 필드:nameage
  • public 속성은 첫 글자 대문자:NameAge,대응 메서드 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)

정리

  1. #foreach(변수 in 컬렉션) + #end 는 Velocity 표준 반복문;
  2. 일반 List 순회 시 $변수 를 직접 출력;
  3. 엔티티 객체 순회:$객체.속성이름 대소문자를 정확히 일치시키고 private 필드에 접근하지 마세요;
  4. C# 엔티티 속성은 첫 글자를 대문자로 통일하고 템플릿도 동일하게 작성;
  5. 데이터가 비어있으면 먼저 속성 대소문자, get 접근자 존재 여부 를 확인하세요.

컬렉션 순회

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다