??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕日韩专区,春暖花开成人亚洲区,国产女人在线观看http://www.aygfsteel.com/bjwulin/category/15369.html2001开始做pbQ我以ؓjavaL很远很远Q?004q初不得不{型做javaQ做java的时候,我以为c++L很远很远Q?007q开始,我不得不转型做c++...zh-cnSat, 28 Apr 2007 04:04:39 GMTSat, 28 Apr 2007 04:04:39 GMT60freemaker的多栏横向复选框列表lg?/title><link>http://www.aygfsteel.com/bjwulin/archive/2007/04/28/114287.html</link><dc:creator>不做躁的h</dc:creator><author>不做躁的h</author><pubDate>Sat, 28 Apr 2007 03:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/bjwulin/archive/2007/04/28/114287.html</guid><wfw:comment>http://www.aygfsteel.com/bjwulin/comments/114287.html</wfw:comment><comments>http://www.aygfsteel.com/bjwulin/archive/2007/04/28/114287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bjwulin/comments/commentRss/114287.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bjwulin/services/trackbacks/114287.html</trackback:ping><description><![CDATA[ <p>环境Q用fm?.3.9Qwebwork2.2.4Q用切换语法)Q?br />一Q作为componentslg的参数如果gؓ字符Ԍ则需要在字符串上加上单引受?br /><ww:component template="checkboxlist_portraitCols.ftl"><br /> <ww:param name="name" value="'test'" /><!--注意单引?-><br /> <ww:param name="colCnt" value="4" /><br /> <ww:param name="list" value="{'1','2','3','4','5','6'}" /><br /></ww:component><br /><br />二:l于理解freemaker的多值类型?br /><br /><#if (parameters.list?size%parameters.colCnt)?int==0>Q求余数是否?Q必d上内|方法int?br /><br />freemaker内置了chunk分块的方法,但是我始l没有想到怎么这个快按纵向进行排列。横向好_直接按行输出。因此写下列模板代码来实现?br /><br /><br /><#assign itemCount = 0/><br /><#if parameters.list??> <br /> <#assign width=(100/parameters.colCnt)?int><br /> <br /> <#assign itemCount = itemCount + 1/></p> <p> <#assign rowCnt=0/><br /> <#assign colCnt=0/><br /> <#list parameters.list?chunk(parameters.colCnt) as row> <br />  <#assign rowCnt=rowCnt+1/><br />  <tr><br />  <#list row as cell><br />   <#assign itemCount = itemCount + 1/><br />   <#assign colCnt=colCnt+1/><br />   <#if rowCnt==0 && col<parameters.colCnt-1 ><br />    <td width='${width}%'><br />   <#else><br />    <td><br />   </#if><br />   <#if parameters.listKey??><br />    <#assign itemKey = cell[parameters.listKey]/><br />   <#else><br />     <#assign itemKey = cell/><br />   </#if><br />   <br />   <#if parameters.listValue??><br />     <#assign itemValue = cell[parameters.listValue]/><br />   <#else><br />     <#assign itemValue = cell/><br />   </#if><br />   <#assign itemKeyStr=itemKey.toString() /><br />    <input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/><br />   <#if tag.contains(parameters.nameValue, itemKey)><br />    checked="checked"<#rt/><br />   </#if><br />   <#if parameters.disabled!(false)><br />    disabled="disabled"<#rt/><br />   </#if><br />   /><br />   <label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label><br />   </td>   <br />  </#list><br /> </#list> <br /><#else><br />  &nbsp;<br /></#if><br /><br />jsp引用面试代码Q?br /><table width="80%"><br /><ww:component template="checkboxlist_landscapeCols.ftl"><br /> <ww:param name="name" value="'test'" /><br /> <ww:param name="colCnt" value="4" /><br /> <ww:param name="list" value="{'1','2','3','4','5','6'}" /><br /></ww:component><br /></table><br /></p> <img src ="http://www.aygfsteel.com/bjwulin/aggbug/114287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bjwulin/" target="_blank">不做躁的h</a> 2007-04-28 11:38 <a href="http://www.aygfsteel.com/bjwulin/archive/2007/04/28/114287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>freemaker的多栏纵向复选框列表lg?/title><link>http://www.aygfsteel.com/bjwulin/archive/2007/04/21/112471.html</link><dc:creator>不做躁的h</dc:creator><author>不做躁的h</author><pubDate>Sat, 21 Apr 2007 10:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/bjwulin/archive/2007/04/21/112471.html</guid><wfw:comment>http://www.aygfsteel.com/bjwulin/comments/112471.html</wfw:comment><comments>http://www.aygfsteel.com/bjwulin/archive/2007/04/21/112471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bjwulin/comments/commentRss/112471.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bjwulin/services/trackbacks/112471.html</trackback:ping><description><![CDATA[ <p>环境Q用fm?.3.9Qwebwork2.2.4Q用切换语法)Q?br />一Q作为componentslg的参数如果gؓ字符Ԍ则需要在字符串上加上单引受?br /><ww:component template="checkboxlist_portraitCols.ftl"><br /> <ww:param name="name" value="'test'" /><!--注意单引?-><br /> <ww:param name="colCnt" value="4" /><br /> <ww:param name="list" value="{'1','2','3','4','5','6'}" /><br /></ww:component><br /><br />二:l于理解freemaker的多值类型?br /><br /><#if (parameters.list?size%parameters.colCnt)?int==0>Q求余数是否?Q必d上内|方法int?br /><br />freemaker内置了chunk分块的方法,但是我始l没有想到怎么这个快按纵向进行排列。横向好_直接按行输出。因此写下列模板代码来实现?br /><br /><#assign itemCount = 0/><br /><#if parameters.list??><br /> <#if (parameters.list?size%parameters.colCnt)?int==0><br />  <#assign rowCnt=(parameters.list?size/parameters.colCnt)?int/><br /> <#else><br />  <#assign rowCnt=(parameters.list?size/parameters.colCnt)?int+1/><br /> </#if><br /> <br /> <#assign width=(100/parameters.colCnt)?int><br /> <br /> <#assign itemCount = itemCount + 1/></p> <p> <#list 0..rowCnt-1 as row><br />  <tr><br />  <#list 0..parameters.colCnt?int-1 as col><br />   <#assign itemCount = itemCount + 1/><br />   <#if row==0 && col<parameters.colCnt-1 ><br />    <td width='${width}%'><br />   <#else><br />    <td><br />   </#if><br />    <#if row+col*rowCnt<parameters.list?size ><br />     <#assign item=parameters.list[row+col*rowCnt] /><br />     <#if parameters.listKey??><br />      <#assign itemKey = item[parameters.listKey]/><br />       <#else><br />         <#assign itemKey = item/><br />       </#if><br />       <br />       <#if parameters.listValue??><br />         <#assign itemValue = item[parameters.listValue]/><br />       <#else><br />         <#assign itemValue = item/><br />       </#if><br />       <#assign itemKeyStr=itemKey.toString() /><br />     <input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/><br />       <#if tag.contains(parameters.nameValue, itemKey)><br />       checked="checked"<#rt/><br />       </#if><br />       <#if parameters.disabled!(false)><br />       disabled="disabled"<#rt/><br />       </#if><br />     /><br />     <label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label><br />    <#else><br />     &nbsp;<br />    </#if><br />   </td><br />  </#list> <br />  </tr><br /> </#list><br /> <br /><#else><br />  &nbsp;<br /></#if><br />jsp引用面试代码Q?br /><table width="80%"><br /><ww:component template="checkboxlist_portraitCols.ftl"><br /> <ww:param name="name" value="'test'" /><br /> <ww:param name="colCnt" value="4" /><br /> <ww:param name="list" value="{'1','2','3','4','5','6'}" /><br /></ww:component><br /></table><br /><br /></p> <img src ="http://www.aygfsteel.com/bjwulin/aggbug/112471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bjwulin/" target="_blank">不做躁的h</a> 2007-04-21 18:21 <a href="http://www.aygfsteel.com/bjwulin/archive/2007/04/21/112471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>freemaker学习W记--指o参?/title><link>http://www.aygfsteel.com/bjwulin/archive/2007/03/27/106295.html</link><dc:creator>不做躁的h</dc:creator><author>不做躁的h</author><pubDate>Mon, 26 Mar 2007 17:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/bjwulin/archive/2007/03/27/106295.html</guid><wfw:comment>http://www.aygfsteel.com/bjwulin/comments/106295.html</wfw:comment><comments>http://www.aygfsteel.com/bjwulin/archive/2007/03/27/106295.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bjwulin/comments/commentRss/106295.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bjwulin/services/trackbacks/106295.html</trackback:ping><description><![CDATA[一Qif指oQ?br /><font color="#a03d10"><#if </font><i style="COLOR: #dd4400">condition</i><font color="#a03d10">><br />  </font><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10"><#elseif </font><i style="COLOR: #dd4400">condition2</i><font color="#a03d10">><br />  </font><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10"><#elseif </font><i style="COLOR: #dd4400">condition3</i><font color="#a03d10">><br />  </font><i style="COLOR: #dd4400">...</i><br /><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10"><#else><br />  </font><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10"></#if></font><br /><br />二:switch<br /><font color="#a03d10"><#switch </font><i style="COLOR: #dd4400">value</i><font color="#a03d10">><br />  <#case </font><i style="COLOR: #dd4400">refValue1</i><font color="#a03d10">><br />    </font><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10">    <#break><br />  <#case </font><i style="COLOR: #dd4400">refValue2</i><font color="#a03d10">><br />    </font><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10">    <#break><br />  </font><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10">  <#case </font><i style="COLOR: #dd4400">refValueN</i><font color="#a03d10">><br />    </font><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10">    <#break><br />  <#default><br />    </font><i style="COLOR: #dd4400">...</i><br /><font color="#a03d10"></#switch><br /><br />三:listQbreak<br /><#list <i style="COLOR: #dd4400">sequence</i> as <i style="COLOR: #dd4400">item</i>><br />    <i style="COLOR: #dd4400">...</i><br /></#list><br /><tt style="COLOR: #a03d10"><font face="Times New Roman">两个Ҏ的@环变量:</font></tt><br /><tt style="COLOR: #a03d10"><em>item</em>_index</tt>: 当前变量的烦引倹{?br /><tt style="COLOR: #a03d10"><i style="COLOR: #dd4400">item</i>_has_next</tt>: 是否存在下一个对象?br /><br />可以?lt;#break/>指odloop循环?br /><br />四:include指o<br /><#include <i style="COLOR: #dd4400">filename</i>><br /><tt style="COLOR: #a03d10">或?br /><#include <i style="COLOR: #dd4400">filename</i><i style="COLOR: #dd4400">options</i>></tt><br /><tt style="COLOR: #a03d10"><i style="COLOR: #dd4400"><br />filename</i></tt>: 表达式{换ؓ字符?br /><tt style="COLOR: #a03d10"><i style="COLOR: #dd4400">options</i></tt>: <tt style="COLOR: #a03d10">encoding=<i style="COLOR: #dd4400">encoding</i></tt>, <tt style="COLOR: #a03d10">parse=<i style="COLOR: #dd4400">parse</i></tt><br />   <tt style="COLOR: #a03d10"><i style="COLOR: #dd4400">encoding</i></tt>: 表达式{换ؓ字符?br />   <tt style="COLOR: #a03d10"><i style="COLOR: #dd4400">parse</i></tt>: 表达式{换ؓ逻辑|是否作ؓftl文g解析?br /><#include "/common/navbar.html" parse=false encoding="Shift_JIS"><br /><br /><font color="#000000"><#include "*/footer.ftl">表示当前目录下以及所有父目录下的文g?br /></font>如果当前模版?font face="Courier New">/foo/bar/template.ftl</font><font color="#000000"> Q那么查找footer.ftl的顺序ؓQ?br /></font><tt style="COLOR: #a03d10">/foo/bar/footer.ftl</tt><br /><tt style="COLOR: #a03d10">/foo/footer.ftl</tt><br />/<tt style="COLOR: #a03d10">footer.ftl</tt><br />q种方式讲允许设计者将通用的模版放在父文g多w面?br />也可以只指定部分路径Q?font color="#000000"><#include "*/commons/footer.ftl"><br /><br />五:import指o<br /></font><#import <i style="COLOR: #dd4400">path</i> as <i style="COLOR: #dd4400">hash</i>><br />六:noparse<br /><#noparse><br />  <i style="COLOR: #dd4400">...</i><br /></#noparse><br /><br />七:compress<br /><#compress><br />  <i style="COLOR: #dd4400">...</i><br /></#compress><br />八:escapeQnoescape<br /><#escape <i style="COLOR: #dd4400">identifier</i> as <i style="COLOR: #dd4400">expression</i>><br />  <i style="COLOR: #dd4400">...</i><br />  <#noescape>...</#noescape><br />  <i style="COLOR: #dd4400">...</i><br /></#escape><br /><br />escape指obody区的ftl?font color="#000000">interpolations都会被自动加上escape表达式。但是不会媄响字W串内的interpolations。而且也只会媄响到body内出现的interpolationsQ比如不会媄响到include的ftl的interpolations?br /></font><p><strong><#escape x as x?html></strong><br />  First name: ${firstName}<br />  Last name: ${lastName}<br />  Maiden name: ${maidenName}<br /><b></#escape><br />{同于:<br /></b></p><div align="left">First name: ${firstName<b>?html</b>}<br />  Last name: ${lastName<b>?html</b>}<br />  Maiden name: ${maidenName<b>?html</b>}<br /><br />escape指o在解析模版时起作用,而不是运行时起作用?br /><br />escape指oq能嵌套使用Q子l承父的escape规则?br /><br /><strong><#escape x as x?html></strong><br />  Customer Name: ${customerName}<br />  Items to ship:<br />  <b><#escape x as itemCodeToNameMap[x]></b><br />    ${itemCode1}<br />    ${itemCode2}<br />    ${itemCode3}<br />    ${itemCode4}<br />  <b></#escape></b><br /><strong></#escape><br />{同于:<br /></strong>Customer Name: ${customerName?html}<br />  Items to ship:<br />    ${itemCodeToNameMap[itemCode1]?html}<br />    ${itemCodeToNameMap[itemCode2]?html}<br />    ${itemCodeToNameMap[itemCode3]?html}<br />    ${itemCodeToNameMap[itemCode4]?html}<br /><br />九:assign指o<br /><pre class="metaTemplate"><tt style="COLOR: #a03d10"><#assign <i style="COLOR: #dd4400">name</i>=<i style="COLOR: #dd4400">value</i>></tt> or <tt style="COLOR: #a03d10"><#assign <i style="COLOR: #dd4400">name1</i>=<i style="COLOR: #dd4400">value1</i><i style="COLOR: #dd4400">name2</i>=<i style="COLOR: #dd4400">value2</i><i style="COLOR: #dd4400">... nameN</i>=<i style="COLOR: #dd4400">valueN</i>></tt> or <tt style="COLOR: #a03d10"><#assign <i style="COLOR: #dd4400">same as above...</i> in <i style="COLOR: #dd4400">namespacehash</i>></tt> or <tt style="COLOR: #a03d10"><#assign <i style="COLOR: #dd4400">name</i>> <i style="COLOR: #dd4400">capture this</i> </#assign></tt> or <tt style="COLOR: #a03d10"><#assign <i style="COLOR: #dd4400">name</i> in <i style="COLOR: #dd4400">namespacehash</i>> <i style="COLOR: #dd4400">capture this</i> </#assign><br /></tt><br />创徏或者替换一个已l存在的变量Q只能作用于层变量? 不好的做法:<#assign x>Hello ${user}!</#assign><br />更改为:<#assign x="Hello ${user}!"><br /><br /><br /><br /><br /></pre>十:global指o<br /><#global <i style="COLOR: #dd4400">name</i>=<i style="COLOR: #dd4400">value</i>><br />or<br /><tt style="COLOR: #a03d10"><#global <i style="COLOR: #dd4400">name1</i>=<i style="COLOR: #dd4400">value1</i><i style="COLOR: #dd4400">name2</i>=<i style="COLOR: #dd4400">value2</i><i style="COLOR: #dd4400">... nameN</i>=<i style="COLOR: #dd4400">valueN</i>></tt><br />or<br /><tt style="COLOR: #a03d10"><#global <i style="COLOR: #dd4400">name</i>><br />  <i style="COLOR: #dd4400">capture this</i><br /></#global></tt><br /><br /><br />十一Qlocal指o<br /><#local <i style="COLOR: #dd4400">name</i>=<i style="COLOR: #dd4400">value</i>><br />or<br /><tt style="COLOR: #a03d10"><#local <i style="COLOR: #dd4400">name1</i>=<i style="COLOR: #dd4400">value1</i><i style="COLOR: #dd4400">name2</i>=<i style="COLOR: #dd4400">value2</i><i style="COLOR: #dd4400">... nameN</i>=<i style="COLOR: #dd4400">valueN</i>></tt><br />or<br /><tt style="COLOR: #a03d10"><#local <i style="COLOR: #dd4400">name</i>><br />  <i style="COLOR: #dd4400">capture this</i><br /></#local><br /></tt>只能用于macro的定义body中?br /><br /><br />十二Qsetting指oQ?br /><br /><#setting <i style="COLOR: #dd4400">name</i>=<i style="COLOR: #dd4400">value</i>><br />name的取D_<br />localQ?br /><font face="Courier New">number_formatQ?br />boolean_format</font>:~省gؓ<font face="Courier New">"true,false"<br />date_format, <tt style="COLOR: #a03d10">time_format</tt>, </font><tt style="COLOR: #a03d10">datetime_format<br />time_zoneQ?br /></tt><font face="Courier New">url_escaping_charset<br />classic_compatible<br /><br />十三Q用戯定义指o<br /><pre class="metaTemplate"><tt style="COLOR: #a03d10"><@<i style="COLOR: #dd4400">macro_or_transf</i><i style="COLOR: #dd4400">param1</i>=<i style="COLOR: #dd4400">val1</i><i style="COLOR: #dd4400">param2</i>=<i style="COLOR: #dd4400">val2</i><i style="COLOR: #dd4400">...</i><i style="COLOR: #dd4400">paramN</i>=<i style="COLOR: #dd4400">valN</i>/></tt><tt style="COLOR: #a03d10"><@<i style="COLOR: #dd4400">macro_or_transf</i><i style="COLOR: #dd4400">param1</i>=<i style="COLOR: #dd4400">val1</i><i style="COLOR: #dd4400">param2</i>=<i style="COLOR: #dd4400">val2</i><i style="COLOR: #dd4400">...</i><i style="COLOR: #dd4400">paramN</i>=<i style="COLOR: #dd4400">valN</i> ; <i style="COLOR: #dd4400">lv1</i>, <i style="COLOR: #dd4400">lv2</i>, <i style="COLOR: #dd4400">...</i>, <i style="COLOR: #dd4400">lvN</i>/></tt><tt style="COLOR: #a03d10"><@<i style="COLOR: #dd4400">macro_or_transf</i><i style="COLOR: #dd4400">...</i>> ... </@<i style="COLOR: #dd4400">macro_or_transf</i>><br /></tt><tt style="COLOR: #a03d10"><br /><br /><@<i style="COLOR: #dd4400">macro_or_transf</i><i style="COLOR: #dd4400">...</i>> ... </@></tt><tt style="COLOR: #a03d10"><@<i style="COLOR: #dd4400">macro_or_transf</i><i style="COLOR: #dd4400">val1</i>, <i style="COLOR: #dd4400">val2</i>, <i style="COLOR: #dd4400">...</i>, <i style="COLOR: #dd4400">valN</i>/></tt><br /><br /></pre>十四Qmacro,nested,return<br /><#macro <i style="COLOR: #dd4400">name</i><i style="COLOR: #dd4400">param1</i><i style="COLOR: #dd4400">param2</i><i style="COLOR: #dd4400">... paramN</i>><br />  <i style="COLOR: #dd4400">...</i><br />  <#nested <i style="COLOR: #dd4400">loopvar1</i>, <i style="COLOR: #dd4400">loopvar2</i>, <i style="COLOR: #dd4400">...</i>, <i style="COLOR: #dd4400">loopvarN</i>><br />  <i style="COLOR: #dd4400">...</i><br />  <#return><br />  <i style="COLOR: #dd4400">...</i><br /></#macro><br /><br />十五Qfunction, return<br /><#function <i style="COLOR: #dd4400">name</i><i style="COLOR: #dd4400">param1</i><i style="COLOR: #dd4400">param2</i><i style="COLOR: #dd4400">... paramN</i>><br />  <i style="COLOR: #dd4400">...</i> <#return <i style="COLOR: #dd4400">returnValue</i>><br />  <i style="COLOR: #dd4400">...</i><br /></#function><br /><br /><#function avg x y><br />  <#return (x + y) / 2><br /></#function><br />${avg(10, 20)} <br /><br />十六Qflush<br /><#flush><br /><br />十七Qstop<br /><#stop><br />or<br /><tt style="COLOR: #a03d10"><#stop <i style="COLOR: #dd4400">reason</i>></tt><br />取消处理模版?br /><br />十八Qftl指o<br /><#ftl <i style="COLOR: #dd4400">param1</i>=<i style="COLOR: #dd4400">value1</i><i style="COLOR: #dd4400">param2</i>=<i style="COLOR: #dd4400">value2</i><i style="COLOR: #dd4400">...</i><i style="COLOR: #dd4400">paramN</i>=<i style="COLOR: #dd4400">valueN</i>><br />ftl指o必须攑֜ftl文g的最上面?br /><br />参数范围Q?br />encodingQ?br />strip_whitespace<br />strip_text<br />strict_syntax<br /><br />十九Qt, lt, rt<br />二十Qattempt, recover<br /><#attempt><br />  <i style="COLOR: #dd4400">attempt block<br /></i><#recover>   <br /><i style="COLOR: #dd4400">recover block</i><br /></#attempt><br /><br /><div align="left"><#attempt><br />  Optional content: ${thisMayFails}<br /><#recover><br />  Ops! The optional content is not available.<br /></#attempt><br /></div></font></div></font><img src ="http://www.aygfsteel.com/bjwulin/aggbug/106295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bjwulin/" target="_blank">不做躁的h</a> 2007-03-27 01:04 <a href="http://www.aygfsteel.com/bjwulin/archive/2007/03/27/106295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>freemaker学习W记--设计指导http://www.aygfsteel.com/bjwulin/archive/2007/03/27/106121.html不做躁的h不做躁的hMon, 26 Mar 2007 17:03:00 GMThttp://www.aygfsteel.com/bjwulin/archive/2007/03/27/106121.htmlhttp://www.aygfsteel.com/bjwulin/comments/106121.htmlhttp://www.aygfsteel.com/bjwulin/archive/2007/03/27/106121.html#Feedback0http://www.aygfsteel.com/bjwulin/comments/commentRss/106121.htmlhttp://www.aygfsteel.com/bjwulin/services/trackbacks/106121.html <# ... > 中存放所有freemaker的内容,之外的内容全部原栯出?br /><@ ... /> 是函数调?br />两个定界W内的内容中Q第一个符可C指令或者函数名Q其后的跟随参数。freemaker提供的控制包括如下:
<#if condition><#elseif condition><#else></#if> 条g判断
<#list hash_or_seq as var></#list> 遍历hash表或者collectionQfreemakerUCsequenceQ的成员
<#macro name param1 param2 ... ><#nested param></#macro> 宏,无返回参?br /><#function name param1 param2><#return val></#function>函数Q有q回参数
var?member_function(...) 用函数对varq行转换QfreemakerUCؓbuild-ins。实际内部实现类似member_function(var, ...)
stringA[M .. N] 取子字符ԌcMsubstring(stringA, M, N)
{key:value, key2:value2 ...} 直接定义一个hash?br />[item0, item1, item2 ...] 直接定义一个序?br />hash0[key0] 存取hash表中key对应的元?br />seq0[5] 存取序列指定下标的元?br /><@function1 param0 param1 ... /> 调用函数function1
<@macro0 param0 param1 ; nest_param0 nest_param1 ...> nest_body < /@macro > 调用宏,q处理宏的嵌?br /><#assign var = value > 定义变量q初始化
<#local var = value> ?macro 或?function 中定义局部变量ƈ初始?br /><#global var = value > 定义全局变量q初始化
${var} 输出q替换ؓ表达式的?br /><#visit xmlnode> 调用macro匚wxmlnode本n及其子节?br /><#recurse xmlnode> 调用macro匚wxmlnode的子节点



<#if condition > </#if>
<#list SequenceVar as variable > repeatThis </#list>
<#include "/copyright_footer.html">

一个ftl标记不能攑֜另外一个ftl标记里面Q但是注释标记能够放在ftl标记里面?br />
pȝ预定义指令采?lt;#...></#>
用户自定义指令采?lt;@...></@>

hash片段可以采用Q?/strong> products[10..19] or products[5..] 的格式?br />
序列也可以做加法计算Qpasswords + {"joe":"secret42"}

~省? name!"unknown" 或?(user.name)!"unknown" 或?name! 或?(user.name)!

null值检? name?? or (user.name)??

转义列表Q?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)


如果x?{Q则需要将{转义Q可以写?$\{user}"Q或者可以用生字W(r指oQ:$(r "${xx}"}

序列构成Q?lt;#list ["winter", "spring", "summer", "autumn"] as x>${x}</#list>

不同的对象可以存攑֜一个序列里面,比如Q?font color="#a03d10">[2 + 2, [1, 2, 3, 4], "whatnot"]
. W一个是数字Q第二个是序列,W三个是字符丌Ӏ?br />
可用采用start..end的方式来定义一个数字序列,start可以于endQ同Ӟend也可以省略?br />
hash取值支持一下四U模式:book.author.name, book["author"].name, book.author.["name"], book["author"]["name"].

Ҏ变量是指freemaker引擎本n定义的变量。访问时Q以.variable_name的语法访问?br />
变量表达式支持嵌套模式,比如Q?{"Hello ${user}!"}?br />
变量表达式在指o中的使用情况Q?br />变量表达式可以在指o中,用“”的方式存在Q不如:<#include "/footer/${company}.html">.
但是不允怸面的方式存在Q?<#if ${isBig}>Wow!</#if>, 正确写法是:<#if isBig>Wow!</#if>.
而且 <#if "${isBig}">Wow!</#if>写法也不正确Q因?${isBig}"q回的是字符Ԍ不是booleancd?br />
字符串中取字W或字符串采用以下语法:${user[0]},${user[0..2]} ${user[4..]},${user?string(4)}

序列操作Q?br />   加法Q?lt;#list ["Joe", "Fred"] + ["Julia", "Kate"] as user> 但要注意串联之后的读取速度变慢?br />   子序列:seq[1..4]

序列和hash的串联都只能用于两个相加Q不能有多个相加的模式,hash相加Q如果两个相加的hash存在相同的keyQ则后面会覆盖前面的?br />

在?gt;=或?gt;Ӟ需要注意一些问题,因ؓfreemaker会将>解释成标记的关闭W,Z解决q个问题Q需要在表达式加上括P比如Q?<#if (x > y)>. 或者?&gt; and &ltW号来代ѝ?/tt>

无值变量(包括无该变量QnullQ返回voidQ无属性等Q:unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!
~省值可以是McdQ不一定是数字Q比如:hits!0 或?colors!["red", "green", "blue"].

如果~省值忽略,那么会默认为空丌Ӏ空序列或者空hashQ因为freemarker支持多类型的倹{不q要让默认gؓ0或falseQ则不能省略~省倹{?br />
非顶层变量的无值处理:
   product.color!"red"Q只处理product不ؓI,color为空的缺省值处理,如果product为空Q则freemaker会抛出异常?product.color)!"red"Q则会处理product为空Qcolor为空Q或者没有color属性的无值情c?br />
无值变量的判断操作Q?em>unsafe_expr?? or (unsafe_expr)??

判断变量是否是无倹{?br />
普通变量插入方? ${expression},${3+5);
数字变量插入方式: #{expression} or #{expression; format}Q过期?br />变量只能用于文本区或者是字符串里面,比如Q?lt;h1>Hello ${name}!</h1>以及 <#include "/footer/${company}.html">

数字值的插入Q根据缺省的number_format输出Q以及可以通过setting来达到设|数字格式的目的Q也可以通过内置函数string来改变输出格式?br />
日期cd的格式设|:date_format, time_format ?datetime_format


定义宏:
   不带参数Q?b><#macro 宏名>...</#macro>Q引?lt;@宏名 />
   带参敎ͼ<#macro 宏名 参数...>...</#macro>Q引?lt;@宏名 参数1=?.../>Q带有参数的宏,调用是参数的值必d参数的个数相同。当然也可以在宏定义时给参数一些默认倹{比如:<#macro greet person color="black">


宏里面的嵌套内容Q?br /><#macro border>
  <table border=4 cellspacing=0 cellpadding=4><tr><td>
    <#nested>
  </tr></td></table>
</#macro> 
在宏的定义body中加?lt;#nested>指o。嵌套的内容可以是Q何正的ftl块?br />
宏的本地变量在嵌套内容中是不可见的?br />
宏定义时Q?lt;#nest>指o相当于调用定义的内容Q而用宏Ӟnest body相当于定义?br />
<#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> 


定义变量Q?br />   在模板中定义的变量将会隐藏(不是更改Q数据模型根下面的同名的变量?br />
模板中的3U类型变量:
   1Q?strong>plain variablesQ能够在模板中的M地方讉KQ一个模板include另外一个模板,也可以访问被包含模板的变量。可以通过assign或者macro指o产生或替换变量?br />   如果要访问数据模型中的变量,则可以通过.global来访问:
   <#assign user = "Joe Hider">
   ${user}          <#-- prints: Joe Hider -->
   ${.globals.user} <#-- prints: Big Joe--> 
   2Q?strong>Local variablesQ宏定义body中用local指o创徏或者替换?br />   3QLoop variables:由list指o产生?br />

namespaces:
<#import "/lib/my_test.ftl" as my> <#-- the hash called "my" will be the "gate" -->
<@my.copyright date="1999-2002"/>
${my.mail} 

讄命名I间里面的变量:<#assign mail="jsmith@other.com" in my>

命名I间与数据模型:命名I间的ftl可以讉K数据模型的变量。同样命名空间的变量也会隐藏数据模型中同名的变量?br />
I白问题Q?br />1QWhite-space strippingQ默认ؓenabledQ清除ftl标记带来的空白以及羃q。处理模板的I白?br />2Qt, rt, lt指o?br />3Qftl的参数strip_text.

用compress directive或者transform来处理输出?br /><#compress>...</#compress>Q消除空白行?br /><@compress single_line=true>.../@compress输出压~ؓ一行?br />
可替换语法:
freemarker可用"["代替"<".在模板的文g开头加?strong>[#ftl].


不做躁的h 2007-03-27 01:03 发表评论
]]>
freemaker学习W记--其它内置Ҏhttp://www.aygfsteel.com/bjwulin/archive/2007/03/26/106271.html不做躁的h不做躁的hSun, 25 Mar 2007 16:04:00 GMThttp://www.aygfsteel.com/bjwulin/archive/2007/03/26/106271.htmlhttp://www.aygfsteel.com/bjwulin/comments/106271.htmlhttp://www.aygfsteel.com/bjwulin/archive/2007/03/26/106271.html#Feedback0http://www.aygfsteel.com/bjwulin/comments/commentRss/106271.htmlhttp://www.aygfsteel.com/bjwulin/services/trackbacks/106271.html<#assign answer=42/>
${answer}
${answer?string}  <#-- the same as ${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}

<#setting number_format="0.###E0"/>

${12345?string("0.####E0")}  


${answer?string("number")} {同于:${answer?string.number}.

二:日期型:
预定义格式包括:short Qmiddle和long?br />
${openingTime?string.short}
${openingTime?string.medium}
${openingTime?string.long}
l合使用Q?{lastUpdated?string.short_long}
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}

三:逻辑?br />foo?string
foo?string("yes", "no")

四:序列的内|方法:
first

last

seq_contains
${x?seq_contains("blue")?string("yes", "no")}

seq_index_of

seq_last_index_of

reverse

size

sort

sort_by
多层ơ的hash排序

<#assign members = [
    {"name": {"first": "Joe", "last": "Smith"}, "age": 40},
    {"name": {"first": "Fred", "last": "Crooger"}, "age": 35},
    {"name": {"first": "Amanda", "last": "Fox"}, "age": 25}]>
Sorted by name.last:
<#list members?sort_by(['name', 'last']) as m>
- ${m.name.last}, ${m.name.first}: ${m.age} years old
</#list> 

chunkQ将一个序列分解成几个序列?br />
<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>

<#list seq?chunk(4) as row>
  <#list row as cell>${cell} </#list>
</#list>

<#list seq?chunk(4, '-') as row>
  <#list row as cell>${cell} </#list>
</#list>
chunkl常用于分栏或者表D出的格式?br />
五:hash内置ҎQ?br />
keysQ?br />valuesQ?br />
六:很少使用或者专家的内|方法:
byte,double,float,int,long,short?br />
eval

has_contentQ变量存在,不是指null也不是空Ԍ一般情况下可以使用expr!?size > 0 or expr!?length > 0 代替expr?has_content?br />
interpret一个字W串解析为ftl模版Q生一?font face="Courier New" color="#a03d10">TemplateTransformModel对象?br /><#assign x=["a", "b", "c"]>
<#assign templateSource = "<#list x as y>${y}</#list>">
<#assign inlineTemplate = templateSource?interpret>
<@inlineTemplate>def/@inlineTemplate

is_...查变量类型:

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


namespaceQ返回宏变量的命名空_只能用于宏?br />
newQ创Z个TemplateModel实现的变量?br /><#assign word_wrapp = "com.acmee.freemarker.WordWrapperTransform"?new()>


不做躁的h 2007-03-26 00:04 发表评论
]]>
freemaker学习W记--字符串内|方?/title><link>http://www.aygfsteel.com/bjwulin/archive/2007/03/25/106264.html</link><dc:creator>不做躁的h</dc:creator><author>不做躁的h</author><pubDate>Sun, 25 Mar 2007 13:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/bjwulin/archive/2007/03/25/106264.html</guid><wfw:comment>http://www.aygfsteel.com/bjwulin/comments/106264.html</wfw:comment><comments>http://www.aygfsteel.com/bjwulin/archive/2007/03/25/106264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bjwulin/comments/commentRss/106264.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bjwulin/services/trackbacks/106264.html</trackback:ping><description><![CDATA[ <p>一Q字W串内置Ҏ<br />      <font face="Courier New"><font color="#a03d10">substring(</font><i style="COLOR: #dd4400">from</i><font color="#a03d10">, </font><i style="COLOR: #dd4400">toExclusive</i><font color="#a03d10">)<br />  <br />   cap_first<br /><br />   <font color="#000000">uncap_first<br /><br />   capitalize<br /><br />   chop_linebreak<br /><br />   date, time, datetime:<br /></font>   <font color="#000000"><#assign test1 = "10/25/1995"?date("MM/dd/yyyy")><br />   <#assign test2 = "15:05:30"?time("HH:mm:ss")><br />   <#assign test3 = "1995-10-25 03:05 PM"?datetime("yyyy-MM-dd hh:mm a")><br /></font><br />   <font color="#000000">ends_with<br /><br />   html<br />   <tt style="COLOR: #a03d10"><</tt> replaced with <tt style="COLOR: #a03d10">&lt;</tt> <br />   <tt style="COLOR: #a03d10">></tt> replaced with <tt style="COLOR: #a03d10">&gt;</tt> <br />   <tt style="COLOR: #a03d10">&</tt> replaced with <tt style="COLOR: #a03d10">&amp;</tt> <br />   <tt style="COLOR: #a03d10">"</tt> replaced with <tt style="COLOR: #a03d10">&quot;</tt> <br /></font><br />   <font color="#000000">groups用于</font><font color="#a03d10">matches的结果?br /><br />   <font color="#000000">index_of<br /><br />   j_string<br /><br />   js_string<br /></font><br />   <font color="#000000">last_index_of<br /><br />   length<br /><br />   lower_case<br /><br />   left_pad<br /><br />   right_pad<br /><br />   contains<br /><br />   matchs<br />   q回boolean或者sequence?br />   <#if "fxo"?matches("f.?o")>Matches.<#else>Does not match.</#if><br />   <#assign res = "foo bar fyo"?matches("f.?o")><br />   <#if res>Matches.<#else>Does not match.</#if><br />   Matching sub-strings:<br />   <#list res as m><br />   - ${m}<br />   </#list><br />   res是典型的多值类型?br /><br />   如果正则表达式包含组Q圆括号Q,可以通过groups讉K?br />   <#assign res = "aa/rx; ab/r;"?matches("(\\w[^/]+)/([^;]+);")><br />   <#list res as m><br />   - ${m} is ${m?groups[1]} per ${m?groups[2]}<br />   </#list> <span style="FONT-SIZE: 1pt"></span></font></font></font></font></p> <p>   number<br /><br />   replace<br /><br />   rtf<br />   <tt style="COLOR: #a03d10">\</tt> replaced with <tt style="COLOR: #a03d10">\\<br /></tt><tt style="COLOR: #a03d10">   {</tt> replaced with <tt style="COLOR: #a03d10">\{<br /></tt><tt style="COLOR: #a03d10">   }</tt> replaced with <tt style="COLOR: #a03d10">\}<br /></tt></p> <div align="left"> <br />   url<br />   所有url的保留字W进行{码?br />   <font face="Courier New" color="#a03d10">url_escaping_charset<br /> <br /></font>  split <span style="FONT-SIZE: 1pt"></span></div> <p>  starts_with<br /><br />   trimQupper_case。word_listQxml<br /><br />   字符串内|方法可以接受的通用标记Q?br />   <tt style="COLOR: #a03d10">i</tt>: 大小写不敏感?br /><tt style="COLOR: #a03d10"> f</tt>: 只用于第一个,常用于替换,查找{,取第一ơ出?br /><tt style="COLOR: #a03d10"> r</tt>: 子串是个正则表达式?br /><tt style="COLOR: #a03d10"> m</tt>: 正则表达式的多行模式?br />   <tt style="COLOR: #a03d10">s</tt>: 单行模式?br /><tt style="COLOR: #a03d10"> c</tt>: 允许I白或注释在正则表达式中?br /><#assign s = 'foo bAr baar'><br />${s?replace('ba', 'XY')}<br />i: ${s?replace('ba', 'XY', 'i')}<br />if: ${s?replace('ba', 'XY', 'if')}<br />r: ${s?replace('ba*', 'XY', 'r')}<br />ri: ${s?replace('ba*', 'XY', 'ri')}<br />rif: ${s?replace('ba*', 'XY', 'rif')}<br /><br /><br /></p> <table cellpadding="4" border="1"> <thead> <tr> <th align="left"> <p>Built-in</p> </th> <th align="left"> <p> <tt style="COLOR: #a03d10">i</tt> </p> </th> <th align="left"> <p> <tt style="COLOR: #a03d10">r</tt> </p> </th> <th align="left"> <p> <tt style="COLOR: #a03d10">m</tt> </p> </th> <th align="left"> <p> <tt style="COLOR: #a03d10">s</tt> </p> </th> <th align="left"> <p> <tt style="COLOR: #a03d10">c</tt> </p> </th> <th align="left"> <p> <tt style="COLOR: #a03d10">f</tt> </p> </th> </tr> </thead> <tbody> <tr> <td align="left"> <p> <tt style="COLOR: #a03d10">replace</tt> </p> </td> <td align="left"> <p>Yes</p> </td> <td align="left"> <p>Yes</p> </td> <td align="left"> <p>Only with <tt style="COLOR: #a03d10">r</tt></p> </td> <td align="left"> <p>Only with <tt style="COLOR: #a03d10">r</tt></p> </td> <td align="left"> <p>Only with <tt style="COLOR: #a03d10">r</tt></p> </td> <td align="left"> <p>Yes</p> </td> </tr> <tr> <td align="left"> <p> <tt style="COLOR: #a03d10">split</tt> </p> </td> <td align="left"> <p>Yes</p> </td> <td align="left"> <p>Yes</p> </td> <td align="left"> <p>Only with <tt style="COLOR: #a03d10">r</tt></p> </td> <td align="left"> <p>Only with <tt style="COLOR: #a03d10">r</tt></p> </td> <td align="left"> <p>Only with <tt style="COLOR: #a03d10">r</tt></p> </td> <td align="left"> <p>No</p> </td> </tr> <tr> <td align="left"> <p> <tt style="COLOR: #a03d10">match</tt> </p> </td> <td align="left"> <p>Yes</p> </td> <td align="left"> <p>No</p> </td> <td align="left"> <p>Yes</p> </td> <td align="left"> <p>Yes</p> </td> <td align="left"> <p>Yes</p> </td> <td align="left"> <p>No</p> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/bjwulin/aggbug/106264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bjwulin/" target="_blank">不做躁的h</a> 2007-03-25 21:38 <a href="http://www.aygfsteel.com/bjwulin/archive/2007/03/25/106264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>freemaker学习W记--~码指导http://www.aygfsteel.com/bjwulin/archive/2007/03/25/106255.html不做躁的h不做躁的hSun, 25 Mar 2007 13:38:00 GMThttp://www.aygfsteel.com/bjwulin/archive/2007/03/25/106255.htmlhttp://www.aygfsteel.com/bjwulin/comments/106255.htmlhttp://www.aygfsteel.com/bjwulin/archive/2007/03/25/106255.html#Feedback0http://www.aygfsteel.com/bjwulin/comments/commentRss/106255.htmlhttp://www.aygfsteel.com/bjwulin/services/trackbacks/106255.html1、配|对象:
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("/where/you/store/templates"));
cfg.setObjectWrapper(new DefaultObjectWrapper()); 


2Q得到模板对象:
Template temp = cfg.getTemplate("test.ftl"); 
Configuration对Template对象q行~存?br />
3Q合q模板和数据模型Q?br />Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush(); 


4Q数据模型:
      M模板要用的数据模型都是通过object wrapping传入的对象包装成实?/strong>TemplateModel接口的对象?br />      TemplateModel提供几个下接口Q?font face="Courier New" color="#a03d10">TemplateSequenceModel{?/font>

5Q单值模型:Scalars   
      Boolean 
      Number 
      String 
      Date

  Template Type Model
6Q方法   ?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)} 

7QTransforms
   import java.io.*;
import java.util.*;
import freemarker.template.TemplateTransformModel;

class UpperCaseTransform implements TemplateTransformModel {

    public Writer getWriter(Writer out, Map args) {
        return new UpperCaseWriter(out);
    }

    private class UpperCaseWriter extends Writer {
      
        private Writer out;
          
        UpperCaseWriter (Writer out) {
            this.out = out;
        }

        public void write(char[] cbuf, int off, int len)
                throws IOException {
            out.write(new String(cbuf, off, len).toUpperCase());
        }

        public void flush() throws IOException {
            out.flush();
        }

        public void close() {
        }
    }
}

root.put("upperCase", new UpperCaseTransform());

<@upperCase>
blah2
blah3
</@upperCase>

8Q访问freemarker的环境变量:Environment.getCurrentEnvironment()

9Q共享变量是指所有模杉K能访问的变量Q在configuration中设|?br />      cfg.setSharedVariable("to_upper", new UpperCaseTransform());
      cfg.setSharedVariable("company", "Foo Inc.");      

      数据模型中的变量会隐藏同名的共享变量?br />
      TemplateModel的实C是线层安全的Q因此不能用于共享变量?br />
      预置׃n变量Q?br />      

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

 
10Q设|层ơ:configuration, template, runtime environment

    


不做躁的h 2007-03-25 21:38 发表评论
]]>
վ֩ģ壺 | ֦| ƽ| | | | ̨| | ɽ| ľ| | ƽ| | | | ĩ| ʲ| | | | | ¸| | | | ɶ| ϲ| | | | | ѷ| ڳ| | | | Ϫ| ˳| ͨ| ƽ| |