freemarker 학습 1
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/>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다른 사람의 웹사이트 편집: contenteditable 및 designMode그래도 우리가 그렇게 할 수 있다고 생각하는 것은 멋진 일입니다. 제가 강조하고 싶었던 일종의 관련 API가 실제로 몇 개 있기 때문에 오늘 그것을 가져왔습니다. contenteditable는 "true" 값이 할당...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.