1. 1.freemarker中Request,Session的用法:  
  2. java块:request.getSession().setAttribute("qq","http://www.qq.com");  
  3. request.setAttribute("qq""http://www.qq.com");  
  4. freemarker代码:  
  5. <#if Session ["qq"]?exists>//Request的用法同session  
  6. <#if Session ["qq"]=="http://www.qq.com">  
  7. <#else>  
  8. </#if>  
  9. <#else>  
  10. </#if>  
  11. 而通常情况下,Request和Session均可省去不写:  
  12. <#if qq?exists>//Request的用法同session  
  13. <#if qq=="http://www.qq.com">  
  14. <#else>  
  15. </#if>  
  16. <#else>  
  17. </#if>  
  18. 但是如果他们都设有相同的key值,那么在页面中显示的话,就就应该把他们加上去。  
  19. 2.freemarker中导入样式表的写法,已经javascript的写法注意:  
  20. 引入样式表:<LINK href="*.css" type=text/css rel=stylesheet>  
  21. 添加样式表:  
  22. <style type="text/css">  
  23.      .imgs img{width:150px ; height:70px;}  
  24. </style>  
  25. javascript块:  
  26. <script language="JavaScript" >  
  27.       function method(para){  
  28. }  
  29.      </script>  
  30. 3.判断集合:  
  31. 集合的集合:  
  32.       <#if voteWraperObj.itemList?size gt 0>  
  33. <#list voteWraperObj.itemList as voteList>  
  34. </#list>              </#if>  
  35.    对象的集合:  
  36.      <#if softDetail?size gt 0>  
  37. <#list softDetail as softlist>  
  38.         </#list>  
  39.      </#if>  
  40. 关于Session中存放的对象的属性的读取:  
  41.     <#if Session ["userweb"].member?exists>  
  42. 4.switch/case的用法:  
  43.    <#switch type>  
  44.       <#case "down">  
  45. <#include "softdown.ftl">  
  46.       <#break>  
  47.       <#case "photo">  
  48. <#if para=="photoSquare">  
  49.     <#include "photo.ftl">  
  50. <#elseif para=="photoWidth">  
  51.     <#include "photo.ftl">  
  52. <#else>  
  53. </#if>  
  54.       <#break>  
  55.    </#switch>  
  56. 5.时间类型在页面是如何才能正常显示的:  
  57. 如:${newslist.pubTime?string('yyyy-MM-dd')}  
  58.       ${newslist.pubTime?string("yyyy-MM-dd HH:mm:ss")}   
  59. 6.判断存在与否,以及是否有效:  
  60. 如:<#if goodslist.f_goods_url?exists&&goodslist.f_goods_url?length gt 0>  
  61. 7.“default”是如何使用的:  
  62. 如: ${qq?default("http://www.qq.com")}  
  63. 即如果属性qq不存在,那么就是要default中的值替代。  
  64. 8.<#assign>的用法:  
  65. <#assign count=0>  
  66. <#assign str="12345">  
  67. <#list 0..9 as i>  
  68.     <#assign count=count+1>   
  69.     <#if i gt str?length>  
  70.        ${count}  
  71.      </#if>  
  72.    </#list>  
  73.    输出为:7 8 9 10  
  74. 9.freemarker中如何截取字符串:  
  75. 方法1:?substring(,)||方法2:[,]  
  76. 区别:前者包头不包未,后者包头又包未:  
  77. 实例:<#assign count=0>  
  78. <#assign str="12345">  
  79. ${str[count..count+1]}  
  80. ${str?substring(count,count+1)}  
  81.    输出为:12,1  
  82. <#assign count=0>  
  83. <#assign str="12345">  
  84. ${str[count..count]}<br/>  
  85. ${str?substring(count,count+1)}  
  86.    这时输出均为:1  
  87. 10.freemarker页面中如果包含  
  88.    <#assign html=JspTaglibs["/WEB-INF/struts-html.tld"]>  
  89. <@html.base/>  
  90.     那么它所指向的路径都是相当路径(相对于当前文件)。  
  91. 11.如何让freemarker模板当html来使用呢:(完整的页面如下)  
  92. <html>  
  93. <head>  
  94.    <#assign html=JspTaglibs["/WEB-INF/struts-html.tld"]>  
  95.    <#assign bean=JspTaglibs["/WEB-INF/struts-bean.tld"]>  
  96.    <#assign logic=JspTaglibs["/WEB-INF/struts-logic.tld"]>  
  97.    <@html.base/>  
  98.    <link href="css/main.css" rel="stylesheet" type="text/css" />  
  99.    <meta http-equiv="content-type" content="text/html; charset="utf-8">  
  100. </head>  
  101. <body>  
  102.    ---------freemarker代码块  
  103. </body>  
  104. </html>  
  105. 12.?使用内建的int(后面讲述)获得整数部分  
  106.     如${1.1?int} = 1  
  107. 13.比较操作符:  
  108. 1使用=(或==,完全相等)测试两个值是否相等,使用!= 测试两个值是否不相等。  
  109. 2.对数字和日期可以使用<、<=、>和>=,但不能用于字符串  
  110. 3.由于Freemarker会将>解释成FTL标记的结束字符,所以对于>和>=可以使用括号来避免这种情况,例如<#if (x > y)>,另一种替代的方法是,使用lt、lte、gt和gte来替代<、<=、>和>=  
  111. 14.内建函数:  
  112.    html:对字符串进行HTML编码  
  113. cap_first:使字符串第一个字母大写  
  114. ?? lower_case:将字符串转换成小写  
  115. ?? upper_case:将字符串转换成大写  
  116.    trim:去掉字符串前后的空白字符  
  117. ?? size:获得序列中元素的数目  
  118.    int:取得数字的整数部分(如-1.9?int的结果是-1)  
  119. 15.根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string格式化单个Interpolation  
  120. 如:<#setting number_format="currency"/>  
  121.    <#assign answer=42/>  
  122.    输出结果是:$42.00  
  123. 单个Interpolation:  
  124.    ${answer?string.number}  
  125.    ${answer?string.currency}  
  126.    ${answer?string.percent}?  
  127. 16. 插入日期值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string格式化单个Interpolation  
  128. 如:${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}  
  129. 17.Session中设置对象属性的判断:  
  130.      Session ["userweb"].member?exists  
  131. 18. 插入布尔值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string格式化单个Interpolation.  
  132. 如:<#assign or=true/>  
  133. ${or?string("You are right!""You are wrong!")}  
  134. 输出为:You are right!  
  135. 19. 数字Interpolation的#{expr; format}形式可以用来格式化数字,format可以是:  
  136.  
  137. ?         mX:小数部分最小X位  
  138.  
  139. ?         MX:小数部分最大X位  
  140. 如:<#assign x=2.582/>  
  141. <#assign y=4/>  
  142. #{x; M2}   <#-- 2.58 -->  
  143. #{y; M2}   <#-- 4    -->  
  144. #{x; m1}   <#-- 2.6 -->  
  145. #{y; m1}   <#-- 4.0 -->  
  146. #{x; m1M2} <#-- 2.58 -->  
  147. #{y; m1M2} <#-- 4.0 -->   
  148. 20.用户定义指令:宏  
  149.    <#macro greet person>  
  150. <font size="+2">Hello ${person}!</font>  
  151.    </#macro>   
  152. 作为用户定义指令使用宏变量时,使用@替代FTL标记中的#  
  153.    <@greet person="Fred"/> and <@greet person="Batman"/>   
  154.    输出为:Hello Fred! and Hello Batman!   
  155. 21: 宏可以有多参数:  
  156. <#macro greet person color>  
  157. <font size="+2" color="${color}">Hello ${person}!</font>  
  158. </#macro  
  159.      可以这样使用该宏变量:  
  160. <@greet person="Fred" color="black"/> ,   其中参数的次序是无关的,只能使用在macro指令中定义的参数,并且对所有参数赋值,所以下面的代码是错误的:  
  161.    只能使用在macro指令中定义的参数,并且对所有参数赋值,多了或者少了都会出错的,完全赋值。如:<@greet person="Fred"/>为错。  
  162.     可以在定义参数时指定缺省值,  
  163.     <#macro greet person color="black">  
  164. <font size="+2" color="${color}">Hello ${person}!</font>  
  165. </#macro>   
  166.        这样<@greet person="Fred"/>就正确了,宏的参数是局部变量,只能在宏定义中有效。  
  167. 22. 嵌套内容  
  168.  
  169. ?         用户定义指令可以有嵌套内容,使用<#nested>指令执行指令开始和结束标记之间的模板片  
  170. <#macro border>  
  171. <table border=4 cellspacing=0 cellpadding=4><tr><td>  
  172.     <#nested>  
  173. </tr></td></table>  
  174. </#macro>   
  175. 这样使用该宏变量:  
  176.  
  177. <@border>The bordered text</@border>  
  178. 输出结果:  
  179.  
  180. <table border=4 cellspacing=0 cellpadding=4><tr><td>  
  181.     The bordered text  
  182. </tr></td></table>  
  183.  
  184. <#if indexL_has_next>