freemarker 학습 1

freemarker 를 자세히 배 웠 더 니 기능 이 정말 강하 다 는 것 을 알 게 되 었 습 니 다.필 기 를 하 세 요.
FreeMarker 는 템 플 릿 을 기반 으로 텍스트 출력 을 만 드 는 일반적인 도구 입 니 다.순수한 자바 로 작 성 된 것 으로 HTML 웹 페이지 를 만 드 는 데 사 용 됩 니 다.특히 MVC 모드 를 기반 으로 한 프로그램 은 자바 프로그램 이 표시 할 데 이 터 를 준비 하고 FreeMarker 에서 페이지 를 만 들 며 템 플 릿 을 통 해 준 비 된 데 이 터 를 표시 합 니 다.사용 할 때 freemarker.jar 가 필요 합 니 다.
간단 한 예시:
일반적인 자바 프로젝트 를 만 들 고 freemarker.jar 패 키 지 를 도입 하여 프로젝트 디 렉 터 리 에 템 플 릿 디 렉 터 리 를 만 듭 니 다.templates 는 templates 디 렉 터 리 에서 1.ftl 템 플 릿 파일 을 만 듭 니 다.내용 은 다음 과 같 습 니 다:hello,${username}!
 
 
public class FreemarkerUtil {

	public Template getTemplate(String name) {
		try {
			//   Freemaker Configuration     ftl
			Configuration cfg = new Configuration();
			//           ftl    
			cfg.setDirectoryForTemplateLoading(new File("templates"));
			//              name   
			Template temp = cfg.getTemplate(name);
			return temp;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void print(String name, Map<String, Object> root) {
		try {
			//   Template              
			Template temp = this.getTemplate(name);
			temp.process(root, new PrintWriter(System.out)); //       
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void fprint(String name, Map<String, Object> root, String outFile) {
		Writer out=null;
		try {
			//          ,           
			out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(
					"E:\\eclipse\\freemarker\\WebContent\\" + outFile)),"UTF-8"));//       ,  html 
			Template temp = this.getTemplate(name);
			temp.setEncoding("utf-8");
			temp.process(root, out);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
			e.printStackTrace();
		} finally {
			try {
				if (out != null)
					out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

호출:
@Test
	public void test01() {
		//1、                 
		Map<String,Object> root = new HashMap<String,Object>();
		//2、        
		root.put("username", "  ");
		//3、                   
		fu.print("01.ftl", root);
		fu.fprint("01.ftl", root, "01.html");
	}

이렇게 하면 01.html 가 생 성 되 고 01.ftl 의 내용 이 있 습 니 다.hello,장삼! 위 에서 보 듯 이 수치 추출 방식 은 el 과 비슷 하 다.반 사 를 통 해 bean 의 값 을 얻 을 수 있 고'..'을 사용 할 수도 있 고'[]'기 존의 User 클래스:id,name,age,user 를 대상 으로 한다.
1 상용 명령:if-else-, 
 <#if user.age lt 12>
${user.name}아직 어린 아이 입 니 다.
<#elseif user.age lt 18>
${user.name}곧 성인 이 됩 니 다.
<#else>
${user.name}성인

list 반복 집합
<#list users as user>
${user.id}----${user.name}--${user.age}


include 명령 어
<\#include"/inc/top.ftl"/>같은 파일 흐름 에서 직접 생 성
2  빈 값 처리
${user.id}-------${user.name}------${user.group!}------------
${user.group.name!} <#-- 이런 식 으로!freemarker 는 group.name 이 빈 값 인지 아 닌 지 만 판단 합 니 다-->${(user.group.name)를 사용 하 는 것 이 좋 습 니 다!}
<\#--${sss}이 변 수 를 정의 하지 않 으 면 이상 을 보고 합 니 다!->
${sss!} <#--이 변 수 를 정의 하지 않 았 습 니 다.기본 값 은 빈 문자열 입 니 다!->
${sss!"abc"}<\#--이 변 수 를 정의 하지 않 았 습 니 다.기본 값 은 문자열 abc 입 니 다!->
??연산 자 는 불 값 을 되 돌려 줍 니 다.예 를 들 어:variable??,변수 가 존재 하면 true 로 돌아 갑 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.
  3  데이터 출력:
<\#assign username="저기"/><\#--정의 변수${username}-->
<\#assign num=10><\#--숫자 를 정의 합 니 다${num+11}-->
<#assign str="10"/>  ${str+11}
<#assign b=true/> 
<#--${b}-->    <#--숫자 나 문자열 이외 의 형식 을 직접 출력 할 수 없습니다.xxx?string 을 사용 하면 문자열 변환 을 완성 할 수 있 습 니 다.출력 할 수 있 습 니 다-->
${b?string} <#-- ${b?string}("1","0") -->
${(a.d)???string} <#--??연산 자 불 값 반환  출력 false-->
${now?string("yyyy-MM-dd HH:mm:ss")}  <#--now 는 Date 대상 을 저장 합 니 다-->
${"hello"+username}<\#--${"hello${username}"}등가-->
<\#--string 을 data,datatime,time 으로 변환 합 니 다-->
<#assign bir="1979-12-02 12:22:33"?date("yyyy-MM-dd")>
<#assign bir="1979-12-02 12:22:33"?datetime("yyyy-MM-dd HH:mm:ss")>  ${bir}
${"
"?html}
[${"abcde"?left_pad(10,"--")}]
${1.8?int}  freemarker 많은 내장 함수,각종 출력,문자열 처리 등 을 만족 시 킬 수 있 습 니 다.
4 시퀀스 와 해시 표
<#assign nums=[1,3,4,56,33,43]/>
${nums?first}
<\#assign nums=12..200/><\#--연속 적 인 서열 12 부터 199 까지 정 의 했 습 니 다-->
<\#--위의 서열 을 나 누 어-->
<#assign nums1=nums[1..10]>
<#list nums1 as num>
${num}

${"안녕하세요,아직도 그녀 를 기다 리 고 있 습 니까?그 러 지 마 세 요."[0.8]}...<\#-많은 css 가 완 성 된 기능 을 완성 할 수 있 습 니 다-->
<\#assign maps={"1":"장삼","2":"이사"}>
${maps["1"]}
<\#-아래 코드 는 맵 의 키 를 상응하는 시퀀스 로 변환 할 수 있 습 니 다-->
<#assign keys=maps?keys>
<#list keys as key>
${key}---${maps[key]}
<\#assign users={"username":"장삼","password":"123"}>
${users.username}---${users["password"]}
5 사용자 정의 명령
<\#--hello 사용자 정의 명령,hello 뒤의 매개 변수(num,ok)-->
<#macro hello num ok>
<#list 1..num as n>

Hello${ok}${n}




<\#--명령 을 사용 할 때 매개 변수 이름 을 생략 할 수 없습니다-->
<@hello num=3 ok="World"/>
<\#--매개 변 수 는 초기 값 을 지정 합 니 다.초기 값 을 지정 한 매개 변 수 는 지정 되 지 않 은 뒤에 두 어야 합 니 다.생략 하면 기본 값 을 사용 합 니 다-->
<#macro repeat num=10 ok="World">
<#list 1..num as n>

Hello${ok}${n}




<@repeat/> <#--호출-->
<#macro test>
<\#--nested 는 명령 의 내용 을 출력 합 니 다-->
<#nested 12 33/>
<#nested 11 22/>
<#nested 22 33/>

<@test;x,y>

안녕하세요-${x}--${y}

 <#--출력 세 번,매개 변수 가 다 릅 니 다

안녕하세요.-11-22

-->

6 변수
데이터 모델 의 변수,템 플 릿 의 변수,부분 변수,순환 변수
<\#assign username="장 삼"><\#-템 플 릿 의 변수 이름과 모델 의 변수 이름 이 일치 하 는 것 은 덮어 쓰 는 것 이 아니 라 숨 기 는 것 입 니 다-->
<\#--.globals 를 사용 하면 모델 의 변수${.globals.username}-->에 접근 할 수 있 습 니 다.
<#macro test>
<\#-이 명령 을 호출 하면 템 플 릿 의 변수 username 을 덮어 쓰기 때문에 이러한 방식 은 위험 합 니 다-->
<\#--<\#assign username="노동절"/>-->
<\#-local 을 사용 하면 국부 변 수 를 설명 할 수 있 기 때문에 marco 에 서 는 일반적으로 국부 변 수 를 사용 합 니 다-->
<\#local username="노동절"/>
${username}

<@test/>
7 네 임 스페이스
<#--
include 를 사용 하면 덮어 쓸 수 있 습 니 다.import 를 사용 하여 가 져 오고 이름 공간 을 추가 할 수 있 습 니 다.
<#include "/inc/inc1.ftl"/>
<#include "/inc/inc2.ftl"/>     -->
<#import "/inc/inc2.ftl" as inc2/>
<#import "/inc/inc1.ftl" as inc1/>
${inc2.username}
${inc1.username}
<\#--이름 공간 에 변 수 를 정의 합 니 다-->
<#assign age=12 in inc2/>
${inc2.age}
<\#--이름 공간 에 접근 하 는 사용자 정의 명령-->
<@inc1.test/>

좋은 웹페이지 즐겨찾기