1. 엔티티 객체를 템플릿에 전달하기
1. PageInfo 엔티티 클래스
지금까지 문자열만 전달했는데 효율이 낮고 유지보수가 불편합니다. 엔티티 클래스로 데이터를 묶으면 코드가 훨씬 직관적이게 됩니다.
public class PageInfo
{
private bool IsShowImage;
public bool IsShowImage1
{
get { return IsShowImage; }
set { IsShowImage = value; }
}
}Code language: C# (cs)
- 비공개 필드
IsShowImage, 공개 속성IsShowImage1으로 외부에 노출 - 템플릿 접근 문법:
$info.IsShowImage1
2. 컨텍스트 데이터 채우기
//템플릿 컨텍스트 컨테이너
IContext context = new VelocityContext();
PageInfo pi = new PageInfo();
pi.IsShowImage1 = true;
//객체 pi를 키 이름 info로 컨텍스트에 저장
context.Put("info",pi);
//문자열 변수 예시
context.Put("infotitle","안녕하세요");Code language: C# (cs)
context.Put("키이름",데이터):데이터를 템플릿으로 넘기고 템플릿은 $키이름으로 읽어옵니다.
2. Velocity 템플릿 핵심 문법
2.1 지시자 기호 #
#로 시작하는 구문은 지시자입니다. 자주 쓰이는 지시자:#if, #else, #end, #foreach, #set, #include
조건 렌더링 예시:
이미지 두 장을 준비한 뒤 웹사이트 루트의 Contents/Images 폴더에 넣으세요. IsShowImage1 값을 바꿔서 보여줄 이미지를 전환합니다.
#if($info.IsShowImage1)
<img src="./Contents/Images/a.gif" />
#else
<img src="./Contents/Images/b.gif" />
#endCode language: PHP (php)
로직: IsShowImage1=true일 때 a.gif 표시, 그 외에는 b.gif 표시
2.2 변수 기호 $
$변수이름:변수 값 출력${변수이름}:변수 경계 지정 (중요!)
사용 상황: 변수 바로 뒤에 문자가 이어질 때 엔진이 변수 이름 끝을 구분하지 못함
잘못된 표기: $infotitlefoxdevelop.com
엔진이 변수명을 infotitlefoxdevelop로 인식하며 존재하지 않는 변수로 취급합니다.
올바른 표기: ${infotitle}foxdevelop.com
infotitle 변수를 해석한 뒤 foxdevelop.com 문자열을 이어 붙임Code language: PHP (php)
2.3 무음 출력 수식자 ! → $!변수이름
기본 동작: 변수가 없으면 페이지에 $변수이름 문자 그대로 출력$!변수이름:변수가 없거나 null일 때 아무것도 출력하지 않고 $ 기호도 표시하지 않음
비교 예시:
| 표기 | 변수 존재(값=”안녕하세요”) | 변수 없음 |
|---|---|---|
$infotitle | 안녕하세요 | $infotitle |
$!infotitle | 안녕하세요 | (빈 값, 아무것도 출력 안함) |
${infotitle} | 안녕하세요 | ${infotitle} |
$!{infotitle} | 안녕하세요 | 빈 값 |
전체 테스트 코드:
${infotitle}foxdevelop.com <br/>
$!infotitlefoxdevelop.com <br/>
$infotitle <br/>
$!infotitle <br/>Code language: HTML, XML (xml)
정리
- 변수 뒤에 문자열을 이어 붙일 때 반드시
${변수}로 감싸기 - 실제 운영 환경에서는
$!{변수이름}을 우선 사용, null일 때 원본$xxx가 출력되어 레이아웃이 깨지는 것을 방지 #if로 불리언 속성 판단 시 그대로#if($info.IsShowImage1)로 작성,==true불필요
기본 템플릿 문법
Previous: NVelocity 개요
Next: 템플릿 안에서 변수 설정하기