锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
聽<ww:param name="name" value="'test'" /><!--娉ㄦ剰鍗曞紩鍙?->
聽<ww:param name="colCnt" value="4" />
聽<ww:param name="list" value="{'1','2','3','4','5','6'}" />
</ww:component>
浜岋細緇堜簬鐞嗚Вfreemaker鐨勫鍊肩被鍨嬨?br />
<#if (parameters.list?size%parameters.colCnt)?int==0>錛氭眰浣欐暟鏄惁涓?錛屽繀欏誨姞涓婂唴緗柟娉昳nt銆?br />
freemaker鍐呯疆浜哻hunk鍒嗗潡鐨勬柟娉曪紝浣嗘槸鎴戝緇堟病鏈夋兂鍒版庝箞灝嗚繖涓揩鎸夌旱鍚戣繘琛屾帓鍒椼傛í鍚戝ソ璇達紝鐩存帴鎸夎杈撳嚭銆傚洜姝ゅ啓涓嬪垪妯℃澘浠g爜鏉ュ疄鐜般?br />
<#assign itemCount = 0/>
<#if parameters.list??>聽
聽<#assign width=(100/parameters.colCnt)?int>
聽
聽<#assign itemCount = itemCount + 1/>
聽<#assign rowCnt=0/>
聽<#assign colCnt=0/>
聽<#list parameters.list?chunk(parameters.colCnt) as row>
聽聽<#assign rowCnt=rowCnt+1/>
聽聽<tr>
聽聽<#list row as cell>
聽聽聽<#assign itemCount = itemCount + 1/>
聽聽聽<#assign colCnt=colCnt+1/>
聽聽聽<#if rowCnt==0 && col<parameters.colCnt-1 >
聽聽聽聽<td width='${width}%'>
聽聽聽<#else>
聽聽聽聽<td>
聽聽聽</#if>
聽聽聽<#if parameters.listKey??>
聽聽聽聽<#assign itemKey = cell[parameters.listKey]/>
聽聽聽<#else>
聽聽聽聽 <#assign itemKey = cell/>
聽聽聽</#if>
聽聽聽
聽聽聽<#if parameters.listValue??>
聽聽聽聽 <#assign itemValue = cell[parameters.listValue]/>
聽聽聽<#else>
聽聽聽聽 <#assign itemValue = cell/>
聽聽聽</#if>
聽聽聽<#assign itemKeyStr=itemKey.toString() />
聽聽聽聽<input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/>
聽聽聽<#if tag.contains(parameters.nameValue, itemKey)>
聽聽聽聽checked="checked"<#rt/>
聽聽聽</#if>
聽聽聽<#if parameters.disabled!(false)>
聽聽聽聽disabled="disabled"<#rt/>
聽聽聽</#if>
聽聽聽/>
聽聽聽<label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label>
聽聽聽</td>聽聽聽
聽聽</#list>
聽</#list>聽
<#else>
聽
</#if>
jsp寮曠敤欏甸潰嫻嬭瘯浠g爜錛?br /><table width="80%">
<ww:component template="checkboxlist_landscapeCols.ftl">
聽<ww:param name="name" value="'test'" />
聽<ww:param name="colCnt" value="4" />
聽<ww:param name="list" value="{'1','2','3','4','5','6'}" />
</ww:component>
</table>
聽<#list 0..rowCnt-1 as row>
聽聽<tr>
聽聽<#list 0..parameters.colCnt?int-1 as col>
聽聽聽<#assign itemCount = itemCount + 1/>
聽聽聽<#if row==0 && col<parameters.colCnt-1 >
聽聽聽聽<td width='${width}%'>
聽聽聽<#else>
聽聽聽聽<td>
聽聽聽</#if>
聽聽聽聽<#if row+col*rowCnt<parameters.list?size >
聽聽聽聽聽<#assign item=parameters.list[row+col*rowCnt] />
聽聽聽聽聽<#if parameters.listKey??>
聽聽聽聽聽聽<#assign itemKey = item[parameters.listKey]/>
聽聽聽聽聽聽 <#else>
聽聽聽聽聽聽聽聽 <#assign itemKey = item/>
聽聽聽聽聽聽 </#if>
聽聽聽聽聽聽
聽聽聽聽聽聽 <#if parameters.listValue??>
聽聽聽聽聽聽聽聽 <#assign itemValue = item[parameters.listValue]/>
聽聽聽聽聽聽 <#else>
聽聽聽聽聽聽聽聽 <#assign itemValue = item/>
聽聽聽聽聽聽 </#if>
聽聽聽聽聽聽 <#assign itemKeyStr=itemKey.toString() />
聽聽聽聽聽<input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/>
聽聽聽聽聽聽 <#if tag.contains(parameters.nameValue, itemKey)>
聽聽聽 聽聽聽checked="checked"<#rt/>
聽聽聽聽聽聽 </#if>
聽聽聽聽聽聽 <#if parameters.disabled!(false)>
聽聽聽 聽聽聽disabled="disabled"<#rt/>
聽聽聽聽聽聽 </#if>
聽聽聽聽聽/>
聽聽聽聽聽<label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label>
聽聽聽聽<#else>
聽聽聽聽聽
聽聽聽聽</#if>
聽聽聽</td>
聽聽</#list>聽
聽聽</tr>
聽</#list>
聽
<#else>
聽
</#if>
jsp寮曠敤欏甸潰嫻嬭瘯浠g爜錛?br /><table width="80%">
<ww:component template="checkboxlist_portraitCols.ftl">
聽<ww:param name="name" value="'test'" />
聽<ww:param name="colCnt" value="4" />
聽<ww:param name="list" value="{'1','2','3','4','5','6'}" />
</ww:component>
</table>
<#escape x as x?html>
聽 First name: ${firstName}
聽 Last name: ${lastName}
聽 Maiden name: ${maidenName}
</#escape>
絳夊悓浜庯細
<#assign name=value> or <#assign name1=value1name2=value2... nameN=valueN> or <#assign same as above... in namespacehash> or <#assign name> capture this </#assign> or <#assign name in namespacehash> capture this </#assign>鍗侊細global鎸囦護
鍒涘緩鎴栬呮浛鎹竴涓凡緇忓瓨鍦ㄧ殑鍙橀噺錛屽彧鑳戒綔鐢ㄤ簬欏跺眰鍙橀噺銆? 涓嶅ソ鐨勫仛娉曪細<#assign x>Hello ${user}!</#assign>
鏇存敼涓猴細<#assign x="Hello ${user}!">
<@macro_or_transfparam1=val1param2=val2...paramN=valN/><@macro_or_transfparam1=val1param2=val2...paramN=valN ; lv1, lv2, ..., lvN/><@macro_or_transf...> ... </@macro_or_transf>鍗佸洓錛歮acro,nested,return
<@macro_or_transf...> ... </@><@macro_or_transfval1, val2, ..., valN/>
緙虹渷鍊? name!"unknown"聽鎴栬?(user.name)!"unknown"聽鎴栬?name!聽鎴栬?(user.name)!
null鍊兼鏌? name?? or (user.name)??
杞箟鍒楄〃錛?br />
Escape sequence | Meaning |
---|---|
\" | Quotation mark (u0022) |
\' | Apostrophe (a.k.a. apostrophe-quote) (u0027) |
\\ | Back slash (u005C) |
\n | Line feed (u000A) |
\r | Carriage return (u000D) |
\t | Horizontal tabulation (a.k.a. tab) (u0009) |
\b | Backspace (u0008) |
\f | Form feed (u000C) |
\l | Less-than sign: < |
\g | Greater-than sign: > |
\a | Ampersand: & |
\{ | Curly bracket: { |
\xCode | Character given with its hexadecimal Unicode code (UCS code) |
鐗規畩鍙橀噺鏄寚freemaker寮曟搸鏈韓瀹氫箟鐨勫彉閲忋傝闂椂錛屼互.variable_name鐨勮娉曡闂?br />
鍙橀噺琛ㄨ揪寮忔敮鎸佸祵濂楁ā寮忥紝姣斿錛?{"Hello ${user}!"}銆?br />
鍙橀噺琛ㄨ揪寮忓湪鎸囦護涓殑浣跨敤鎯呭喌錛?br />鍙橀噺琛ㄨ揪寮忓彲浠ュ湪鎸囦護涓紝鐢ㄢ溾濈殑鏂瑰紡瀛樺湪錛屼笉濡傦細<#include "/footer/${company}.html">.
浣嗘槸涓嶅厑璁鎬笅闈㈢殑鏂瑰紡瀛樺湪錛?<#if ${isBig}>Wow!</#if>,聽姝g‘鍐欐硶鏄細<#if isBig>Wow!</#if>.
鑰屼笖 <#if "${isBig}">Wow!</#if>鍐欐硶涔熶笉姝g‘錛屽洜涓?${isBig}"榪斿洖鐨勬槸瀛楃涓詫紝涓嶆槸boolean綾誨瀷銆?br />
瀛楃涓蹭腑鍙栧瓧絎︽垨瀛楃涓查噰鐢ㄤ互涓嬭娉曪細${user[0]},${user[0..2]} ${user[4..]},${user?string(4)}
搴忓垪鎿嶄綔錛?br />聽聽聽鍔犳硶錛?lt;#list ["Joe", "Fred"] + ["Julia", "Kate"] as user> 浣嗚娉ㄦ剰涓茶仈涔嬪悗鐨勮鍙栭熷害鍙樻參銆?br />聽聽聽瀛愬簭鍒楋細seq[1..4]
搴忓垪鍜宧ash鐨勪覆鑱旈兘鍙兘鐢ㄤ簬涓や釜鐩稿姞錛屼笉鑳芥湁澶氫釜鐩稿姞鐨勬ā寮忥紝hash鐩稿姞錛屽鏋滀袱涓浉鍔犵殑hash瀛樺湪鐩稿悓鐨刱ey錛屽垯鍚庨潰浼氳鐩栧墠闈㈢殑銆?br />
鍦ㄤ嬌鐢?gt;=鎴栬?gt;鏃訛紝闇瑕佹敞鎰忎竴浜涢棶棰橈紝鍥犱負freemaker浼氬皢>瑙i噴鎴愭爣璁扮殑鍏抽棴絎︼紝涓轟簡瑙e喅榪欎釜闂錛岄渶瑕佸湪琛ㄨ揪寮忓姞涓婃嫭鍙鳳紝姣斿錛?<#if (x > y)>.聽鎴栬呬嬌鐢?> and <絎﹀彿鏉ヤ唬鏇褲?/tt>
鏃犲煎彉閲忥紙鍖呮嫭鏃犺鍙橀噺錛宯ull錛岃繑鍥瀡oid錛屾棤灞炴х瓑錛夛細unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!
緙虹渷鍊煎彲浠ユ槸浠諱綍綾誨瀷錛屼笉涓瀹氭槸鏁板瓧錛屾瘮濡傦細hits!0聽鎴栬?colors!["red", "green", "blue"].
濡傛灉緙虹渷鍊煎拷鐣ワ紝閭d箞灝嗕細榛樿涓虹┖涓層佺┖搴忓垪鎴栬呯┖hash錛屽洜涓篺reemarker鏀寔澶氱被鍨嬬殑鍊箋備笉榪囪璁╅粯璁ゅ間負0鎴杅alse錛屽垯涓嶈兘鐪佺暐緙虹渷鍊箋?br />
闈為《灞傚彉閲忕殑鏃犲煎鐞嗭細
聽聽聽product.color!"red"錛氬彧澶勭悊product涓嶄負絀猴紝color涓虹┖鐨勭己鐪佸煎鐞嗭紝濡傛灉product涓虹┖錛屽垯freemaker浼氭姏鍑哄紓甯搞?product.color)!"red"錛氬垯浼氬鐞唒roduct涓虹┖錛宑olor涓虹┖錛屾垨鑰呮病鏈塩olor灞炴х殑鏃犲兼儏鍐點?br />
鏃犲煎彉閲忕殑鍒ゆ柇鎿嶄綔錛?em>unsafe_expr?? or (unsafe_expr)??
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count>
</#list>
</#macro>
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>聽
${openingTime?string.short} ${openingTime?string.medium} ${openingTime?string.long}緇勫悎浣跨敤錛?{lastUpdated?string.short_long}
Built-in | Returns true if the value is a ... |
---|---|
is_string | string |
is_number | number |
is_boolean | boolean |
is_date | date (all types: date-only, time-only and date-time) |
is_method | method |
is_transform | transform |
is_macro | macro |
is_hash | hash |
is_hash_ex | extended hash (i.e. supports ?keys and ?values) |
is_sequence | sequence |
is_collection | collection |
is_enumerable | sequence or collection |
is_indexable | sequence |
is_directive | macro or transform |
is_node | node |
聽聽聽number
聽聽聽replace
聽聽聽rtf
聽聽聽\ replaced with \\
聽聽聽{ replaced with \{
聽聽聽} replaced with \}
聽 starts_with
聽聽聽trim錛寀pper_case銆倃ord_list錛寈ml
聽聽聽瀛楃涓插唴緗柟娉曞彲浠ユ帴鍙楃殑閫氱敤鏍囪錛?br />聽聽聽i: 澶у皬鍐欎笉鏁忔劅銆?br />聽f: 鍙敤浜庣涓涓紝甯哥敤浜庢浛鎹紝鏌ユ壘絳夛紝鍙栫涓嬈″嚭鐜?br />聽r: 瀛愪覆鏄釜姝e垯琛ㄨ揪寮忋?br />聽m: 姝e垯琛ㄨ揪寮忕殑澶氳妯″紡銆?br />聽聽聽s: 鍗曡妯″紡銆?br />聽c:聽鍏佽絀虹櫧鎴栨敞閲婂湪姝e垯琛ㄨ揪寮忎腑銆?br /><#assign s = 'foo bAr baar'>
${s?replace('ba', 'XY')}
i: ${s?replace('ba', 'XY', 'i')}
if: ${s?replace('ba', 'XY', 'if')}
r: ${s?replace('ba*', 'XY', 'r')}
ri: ${s?replace('ba*', 'XY', 'ri')}
rif: ${s?replace('ba*', 'XY', 'rif')}
Built-in |
i |
r |
m |
s |
c |
f |
---|---|---|---|---|---|---|
replace |
Yes |
Yes |
Only with r |
Only with r |
Only with r |
Yes |
split |
Yes |
Yes |
Only with r |
Only with r |
Only with r |
No |
match |
Yes |
No |
Yes |
Yes |
Yes |
No |
聽 Template
Type
Model
6錛氭柟娉暵犅犅犅?br />public class IndexOfMethod implements TemplateMethodModel {
聽聽聽
聽聽聽 public TemplateModel exec(List args) throws TemplateModelException {
聽聽聽聽聽聽聽 if (args.size() != 2) {
聽聽聽聽聽聽聽聽聽聽聽 throw new TemplateModelException("Wrong arguments");
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 return new SimpleNumber(
聽聽聽聽聽聽聽聽聽聽聽 ((String) args.get(1)).indexOf((String) args.get(0)));
聽聽聽 }
}聽
root.put("indexOf", new IndexOfMethod());聽
<#assign x = "something">
${indexOf("met", x)}
${indexOf("foo", x)}聽
name | class |
---|---|
capture_output | freemarker.template.utility.CaptureOutput |
compress | freemarker.template.utility.StandardCompress |
html_escape | freemarker.template.utility.HtmlEscape |
normalize_newlines | freemarker.template.utility.NormalizeNewlines |
xml_escape | freemarker.template.utility.XmlEscape |