기본 템플릿 문법

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)

정리

  1. 변수 뒤에 문자열을 이어 붙일 때 반드시 ${변수}로 감싸기
  2. 실제 운영 환경에서는 $!{변수이름}을 우선 사용, null일 때 원본 $xxx가 출력되어 레이아웃이 깨지는 것을 방지
  3. #if로 불리언 속성 판단 시 그대로 #if($info.IsShowImage1)로 작성, ==true 불필요

기본 템플릿 문법

답글 남기기

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