freemarker学习

来源:互联网 发布:程序员的数学 epub 编辑:程序博客网 时间:2024/05/21 11:05

freemarker比jsp更加面向程序化结构,更容易受后端开发的青睐。freemarker支持比jsp更多的功能,还有程序化的function,变量化的macro。freemarker的是:模板+数据模型=输出。freemarker的ftl称为模板。数据模型是在controller中组织的。

      和jstl一样,在ftl中可以使用很多标签,ftl中的标签不需要依附于javax.servlet. 标签以#,@作为开始(@为自定义标签使用),常见的标签有:

   (1)assign

      在模板中定义一个变量,这个变量可以是自定义的,或者是来自别的变量。当来自于别的变量时,属于值拷贝,原始变量的改变并不影响新变量额值。在assign定义时,有两种方式:

        A:<#assign variable=variableB>

        B:<#assign variable>capture this body</#assign>

        在B方案中,可以嵌套使用别的其他标签。

(2)list,break

        list用于循环迭代出序列的值,如下使用方式:

        <#assign hexiong=["hexiong1","hexiong2","hexiong3"]>

        <#list hexiong as x>

            ${x}

            <#if x=="hexiong2"><#break></#if>

        </#list>

         list循环迭代出序列hexiong里的值,并当循环到hexiong2时,跳出循环。break标签还用于swtich标签中,用于跳出switch。

(3)switch,case,break,default;

         分支选择,选择的对象支持字符串和数字。比jstl中的choose霸气多了。

         <#assign hexiongvalue="java">

         <#switch hexiongvalue>

             <#case "c++">

             hello c++;

                 <#break>

             <#case "java">

             hello java;

                 <#break>

             <#case "javascript">

             hello javascript;

                 <#break>

             <#default>

             nothing;

         </#switch>

 (4)if, elseif, else

    条件判断,比jstl中的if高大上了很多,支持了elseif和else,终于不用像jstl那样,if就像联排别墅一样。

   <#assign hexiongvalue="hello">

   <#if hexiongvalue="hexiong">

       hexiong

   <#elseif hexiongvalue="hello">

       hello

   <#elseif hexiongvalue="x">

       x

   <#else>

       else

   </#if>

  

     freemarker的标签稍微有点bt,特别是体现在对空变量的处理上,如果使用了未处理的空变量,就会出现错误。

在编写模板时,一般需要对空变量进行处理。

1. ${ddd?if_exists} 如果ddd不存在,就会被当成空字符串处理。最后被转义成ddd!

2. <#if ddd??>doSomething</#if>和<#if ddd?exists>doSomething</#if>,判断变量是否存在,如果存在返回true,不存在返回false,?exists会被转义成??

3. ${ddd?default(“hello")}如果变量ddd不存在,则会返回hello。?default(“hello”),会被转化成ddd!”hello”;

4. ${ddd!”hello”},同3一样,如果ddd不存在则返回hello;

0 0