FreeMarker手册

所需积分/C币:50 2015-10-20 21:32:08 2.30MB PDF
1
收藏 收藏
举报

FreeMarker简体中文开发手册,用于Fremarker 2.3.18,南磊译。
25指令 26节点变量 74 27对象包装…… 75 第三章配置 31基本内容 79 32共享变量……………79 3.3配置信息… 80 34模板加载……… 82 35错误控制 第四章其它 .::::::::::· 89 41变量 42字符集问题 4.3多线程 44Bean的包装 4.5日志………97 46在 Servlet中使用 FreeMarker 47为 Free marker配置安全策咯 105 48遗留的XML包装实现.………………………………106 49和Ant一起使用 FreeMarker. 410 othon包装器 第三部分XML处理指南 .112 前言. 着着垂,看看 ∴12 第一章揭示XML文档 1.1节点树 113 1.2将XML放到数据模型中 4115 第二章必要的XML处理 117 21通过例子来学习 22形式化描述 第三章声明的XML处理 129 31基础内容 129 32详细内容 第四部分参考文档 134 第一章内建函数参考文档 34 11处理字符串的内建函数 ·:···::····:··· ∴134 12处理数字的内建函数 147 13处理日期的内建函数 14处理布尔值的内建函数 155 15处理序列的内建函数 156 16处理哈希表的内建函数 17处理节点(XML)的内建函数 162 18很少使用的和专家级的内建函数 163 第二章指令参考文档 167 21f,else, elseif指令 22 switch,case, default, break指令 169 23ist, break指令 24 include指令 25 import指令 着着着 174 26 hoarse指令 27 compress指令 176 28 escape, noescape指令…177 29 assign指令 179 210 global指令 81 211|oca指令 ∴182 212 setting指令 182 2.13用户自定义指令(<@.>) 184 214 macro, nested, return指令 2.15 function, return指令 216fush指令 217stop指令… 192 2.18ft指令 2.19t,[t,rt指令…………………………194 220nt指令 221 attempt, recover指令 96 2.22ⅵisit, recurse, fallback指令 97 第三章特殊变量参考文档 202 第四章「L中的保留名称… 着着垂,看看 204 第五章废弃的「L结构…… 205 5.1废弃的指令列表 5.2废弃的内建函数刎表…………………………205 53老式的 macro和ca指令 205 54转换指令 207 55老式FIL语法 .208 5.6#{-}式的数字插值 209 第五部分附求… 211 附录AFAQ 211 1.JSP和 FreeMarker的对比 211 2. Velocity和 Free Marker的对比 .212 3.为什么 FreeMarker对nu11-s和不存在的变量很敏感,如何米处理它?212 4.文档编写了特性Ⅹ,但是好像 FreeMarker并不知道它,或者它的行为和文档描 述的不同,或者一个据称已经修改的BUG依然存在。 213 5.为什么 FreeMarker打印奇怪的数字数字格式(比如100000或1000000而不 是1000000)? .213 6.为什么 Free Marker会打印不好的小数和/线分组分隔符号(比如314而不是3,14) 214 7.为什么当我想用如格式打印布尔值时, FreeMarker会抛出错误,又如何米修正 呢? 214 8. FreeMarker标签中的<和>混淆了编辑器或XML处理器,应该怎么做? 214 9.什么是合法的变量名? 214 10.如何使用包含空格,或其他特殊字符的变量(宏)名? 11.当我试图使用JsP客户标签时为什么会得到非法参数异常:形式参数类型不匹 配 215 12.如何像j39: include一样的方式引入其它的资源?…… 216 3.如何给普通 方法 TemplateMe tho dMode IEx/ emplate Trans formMcdel/ TemplateDirect l的实现传递普通 java.1ang.*/java.uti1.*对象的参数? 216 14.为什么在 myMap[ mykcy]表达式中不能使用非字符串的键?那现在应该怎么 做? 217 15.当使用?keys/?va1ues遍历Map(哈希表)的内容吋,得到了混合真正map 条目的java.uti1.Map的方法。当然,只是想获取map的条目 218 16.在 Free Marker的模板中如何改变序列(ists)和哈希表(maps)? 17.关于nu11在 FreeMarker模板语言是什么样的? 8我该怎么在表达式(作为另外一个指令参数)中使用指令(宏)的输出?220 19.在输出中为什么用“?”来代替字符X? 220 20.在模板执行完成后,怎么在模板中获取计算过的值? 221 21.我能允许用户上传模板吗?又如何保证安全呢? 221 22.如何在Java语言中实现方法或宏而不是在模板语言中? 222 23.为什么 FreeMarker的日志压制了我的应用程序? 222 24.在基于 Servlet的应用程序中,如何在模板执行期间发生错误时,展小一个友 好的错误提示页面,而不是堆栈轨迹? 223 25.我正使用一个可视化的HTML割裂模板标记的编辑器。你们可以改变模板语言 的语法来兼容我的编辑器么? I0 223 26. FreeMarker有多快?真的是2X版本的要比1x版本(经典的 FreeMarker)的慢 223 27.我的Java类怎么才能获取到关于模板结构的信息(比如所有变量的列表)? 着重 224 28.你会一直提供向后的兼容性吗? .224 29.如果我们把 FreeMarker和我们的产品一起发行,我们需要发布我们产品的源代 码么?, .:: :.::::...:.:.:::::::::::::.a.::::.:::::::::::: 225 附录B安装 Freemarker 226 附录C构建 Free Marker. 227 附录D版本 .228 2318版 ·:···::····:··:::·· ∴228 2317版 228 2316版 .231 2315版 231 2314版 .232 2313版 .233 2312版 2311版 .234 2310版 235 239版 236 238版 237 2.37版 .::.:· 37 2.37RC1版 238 236版 239 235版 234版 着,着,着着I 240 2.33版…… ::::.::.::: 241 232版 242 231版 243 23版 .245 228版 258 2.27版… .:.:::::::.::.:.:.:::::::::::::日::: 258 226版 258 22.5版 224版 260 223版 1,DD, 1,DD面着着D 260 22.2版 .26 221版 261 22版……… ∴262 215版 270 2.14版 270 213版 270 212版 着曹看 271 2.1.1版.…………… I0 271 21版 2.01版………………276 2.0版 276 20RC3版 277 20RC2版 278 20RC1版… .279 附录E许可 :.::::a.:.::.:::::::: 282 词汇表… 前言 什么是 FreeMarker? FreeMarker是一款模板引擎:一种基于模板的、用来生成输出文本(仟何来自于HTML 格式的文本用来自动生成溟代码)的通用工具。它是为Java程序员提供的·个丌发包或者说 是类库。它不是面向最终用户,而是为程序员提供的可以嵌入他们开发产品的一款应用程序。 FreeMarker的设计实际上是被用来成HTML网页,尤其是通过基于实现了MVC( Model View corη troller,模型-视图-控制器)模式的 Servlet应用程序。使用MνC模式的动态网页的构 思使得你可以将前端设计者(编写HTML)从程序员中分离出来。所有人各司其职,发挥其擅 长的面。网页设计师可以改写页面的显示效果而不受程序员编译代码的影响,因为应用程 序的逻辑(Java稈序)和页面设计 FreeMarker模板)已绎分开了。页面模板代码不会受到复杂 的程序代码影响。这种分离的思想即便对一个程序员和页面设计师是同一个人的项目来说都 是非常有用的,因为分离使得代码保持简洁而且使丁维护。 尽管 Free marker也有编程能力,但它也不是像PHP那样的一利全面的编程语言。反而, ava程序准备的数据来显示(比如sαL查询}, FreeMarker仅仅使用模板生成文木页面来呈现 已经准条好的数据。 Template file <html> Hello *nameI Output </html <html> Java objects Free Marker Hello Fred </html> d次 a name="Fred" FreeMarker不是Web应用框架。它是Web应用框架中的一个适用的组件,但是 FreeMarker引擎本身并不知道HTTP协议或Servlet。它仅仅来生成文本。即便这样,它也非 常适用于非web应用环境的开发。要注意的是,我们使用 FreeMarker作为视图层组件,是 为给如 Struts这样的Mode2框架提供现成的解决方案。 FreeMarker是免费的,基于B$规则的许可。它是OS认证的开源软件。OSl认证是开 源倡议的认证标识。 我们应该阅读什么内容? 如果你是一名 前端设计师,那么你应该阅读模板开发指南,然后如果需要的话可以阅读参考手册来获 取更多技术绀节 稈序员,那么你应该先阅读模板开发指南,然后是程序开发指南,最后如果需要的话 以阅读参考手册来获取更多技术绀节 文档规约 变量名,模板代码段,Java类名等用如下格式书写,如:foo 如果需要具体值来代替某些内容,那么用斜体书写,如:He11∞ yourName 模板示例如下书写 Something 数据对象示例如下书写: Something 输出数据示例如下书写 Something 程序示例如下书写 Something 在面向页面设计师和稈序员所编写的章节中代码段给稈序员这样写:这只是对程序员而 言的。 这样来强调新名词:一些新名词 联系我们 获取最新版本的FreeMarker,订阅邮件请访问FreeMarker上页http://freemarker.org 如果你需要帮助或者有好的建议,可以使用邮件(邮件文件可以免费搜索)或者Web论坛。 如果你想报告一个B唱g,请使用web的Bug跟踪系统或者是邮件。查阅这些内容请访问 http://freemarker.orgo同时,要注意我们有一个FAQ和索引,你可以使用它们。 几点说明 因为英文版文档的作者是匈牙利人,其母语非吳语,那么在这种情况的翻译过程,可能 会有错误存在,作者结合自身多年对 FreeMarker的实践力求精准,但因个人才疏学浅,水 平有限,恳请读者批评指正。 手册的更新根据人家的反馈随时进行,但只在有阶段性成果时公开发布修正版本,并在 FreeMarker2.4版本研发完整后,会及时联系原作者获取新特性以便修改。 本翻译是免费的,您可以自由下载和传播,不可用于任何商业行为。但文栏版权归译者 所有,原版归 FreeMarker项目组所有,您可以引用其中的描述,但必须指明出处。如需用 于商业行为,您必须和原作者取得联系。 如果你发现英文原版任何错误(包括语法错误,错别字)或者是在文档中找到一些误导 或混淆错误,也可以是其他的建议,或是咨询 FreeMarker中的问题,您可以联系原作者 E-mail: ddekany freemailhu 关于本文档的翻译错误(包括语法错误,错别字)或中文技术交流,可以联系译者: nanlei1987@gmail.com或http://weibo.com/nanlei1987我们共同研究,共同进步。 第一部分模板开发指南 第一章模板开发入门 11简介 本章是关于 Free Marker非常简略的介绍,后续章节中将会详细介绍它们。不过没关系, 只要你阅读∫本章节的内容,你就能够编写简单但却很有用的 FreeMarker模板程序, 1.2模板+数据模型=输出 假设你在一个在线商店的应用系统中需要一个HTML页面,和下面这个页面相似 <html> <head> <title>Welcome! </title> </head> <h1>Welcome Big Joe!</h1> <p>Our latest product: Ka href=products/greenmouse html">green mouse</a>! </htm1> 比方说,用户名(所有的 Big Joe”)应该是登永这个贞访问者的名字,最新产品的数 据应该来自于数据库,这样它才可以随时更新。在这样的情况下你不能在HIML页面中直接 输入登的用户名,最新产品的URL和名称,你不能使用静态的HTML代码,那样是不能即 时改变的 对于这个问题, FreeMarker的解决方案是使用模板来代替静态HTML文本。模板文件同 样是静态的HTML代码,但是除了这些HTML代码外,代码中还包括了一些 FreeMarker指令, 这些指令就能够做到动态效果。 <html <head> <title>Welcome!</title> </head> body <h1>Welcome S[user]!</h1> p>Our⊥ atest p <a href=s(latestProduct url]">silatestProduct, name]/a>! </bod </html> 这个模板存放在Web服务器上,看上去像是静态的HTML页面。但是不管何时,只要 有人访问这个页面时, Freemarker将会介入执行,然后动态转换模板,用最新的数据内容替 换S{}中的部分(例如:用 Big joe或者其他的访问者的用户名来代替S{user}),生成普通的 HTML文本并发送结果到访问者的Web浏览器中去显示。所以访问者的Web浏览器会接收 到类似于第·个HTML示例的内容(也就是说,显示普通的HTML文本而没有 Free Marker 的指令),浏览器也不会感知到 FreeMarker在服务器端被调用了。模板文件本身(存储在 Web服务器端的文件)在这个过程中也不会改变什么,所以这个转换过程发生在次又 次的访问中。这样就保证了显示的信息总是即时的 现在,你也许已经注意到,该模板并没有包含关于如何找出当前的访问者是谁,或者是 如何去查询数据斥查找最新的产品的指令。它似乎已经知道了这些数据。确实是这样, FreeMarker胥后(确切的说是MvC模式的背后)的重要思想就是表现逻辑和业务逻辑相分 离。在模板只是处理显示问题,也就是视觉设计问题和格式问题。所准备要显示的数据(如 用户名等)与 FreeMarker无关,这通常是使用Java语言或其他口的语言来编写的。所以模 板开发者不需要关心这些数值是如何计算出来的。事实上,在模板保持不变的同时,这些数 值的计算方式可以完全发生变化。而且,除了模板外,页面外观发生的变化可以完全不触碰 其他任何东西。当模板开发者和程序员是不同一个人的时候,分离带来的好处更是显而易见 FreeMarker(还有模板开发者)并不关心数据是如何计算的, FreeMarker只是知道真实 的数据是什么。模板能用的所冇数据被包装成data-mode数据模型。数据模型的创建是通 过已经存在的程序计算得到的。至于模板开发者,数据模型像是树状结构(比如馊盘上的文 件夹和文件),正如本例中的数据模型,就可以如下形式来描述 (root +- user =Big Joe +-latestProduct +-url ="products/greenmouse html" + name =green mouse (为∫避免误解:数据模型并不是文本文件,上血所描述的只是一种薮据模型的表现形式 它来自于Java对象,但这会成为Java程序员要面对的问题。) 比较之前你在模板中看到的S{user)和S{1 atestProduct.name}。作为一种 比喻:数据模型訫像计算机文件系统上的内容:根◎t和1atesτ Product对应日录 (文件火),user,u1和name对应文件。ur1和name在1 atestProduct目录 中,所以1 atestProduct.name就像是说1 atestProduct目录的name一样。 但是我所说的,这仅仅是个比喻,这里并没有真实的文件和目录。 概括地讲,模板和数据模型是 FreeMarker所需,并用米生成输出内容的(比如之前展 示的HTML):模板+数据模型=输出 13数据模型一览 正如你看到的,数据模型基本结构是树状的。这棵树可以复杂而且有很大的深度,比如:

...展开详情
试读 127P FreeMarker手册
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
FreeMarker手册 50积分/C币 立即下载
1/127
FreeMarker手册第1页
FreeMarker手册第2页
FreeMarker手册第3页
FreeMarker手册第4页
FreeMarker手册第5页
FreeMarker手册第6页
FreeMarker手册第7页
FreeMarker手册第8页
FreeMarker手册第9页
FreeMarker手册第10页
FreeMarker手册第11页
FreeMarker手册第12页
FreeMarker手册第13页
FreeMarker手册第14页
FreeMarker手册第15页
FreeMarker手册第16页
FreeMarker手册第17页
FreeMarker手册第18页
FreeMarker手册第19页
FreeMarker手册第20页

试读结束, 可继续阅读

50积分/C币 立即下载 >