FreeMarker与SSM的整合

FreeMarker是一个用Java语言编写的模板引擎。它基于模板来生成文本输出。Freemarker与web容器无关,即在web运行时,它并不知道servlet或者HTTP,它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java等。目前在企业中,主要用freemarker做静态页面或是页面展示。

  其实在我的理解freemarker就是一种工具,它能把jsp页面转换成静态页面,为用户的访问节省时间,同样减少服务器的压力。

FreeMarker与SSM的整合_第1张图片

从我自己测试以及看网上大家的评论可以得出FreeMarker具备以下优点:
1、逻辑分离好,View层不出现逻辑代码,可维护性好
2、美工和技术的工作分离
3、速度快,省去了Jsp编译过程

在Maven中使用它:

<dependency>
<groupId>freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>2.3.9version>
dependency>

 
    
        
        
        
        
            org.springframework.web.servlet.view.freemarker.FreeMarkerView
        
    


    
    
        
            /WEB-INF/webpage/
        
        
            
                5
                UTF-8
                UTF-8
                yyyy-MM-dd HH:mm:ss
                HH:mm:ss
                0.####
                true,false
                true
                auto_detect
                UTF-8
            
        
    
//index.ftl


    
    Inserttitle here


${username}

 @RequestMapping(value = "/aaa",method = RequestMethod.GET)
    public String select(Model model)
    {
        model.addAttribute("username","Hello world");
        return "index";
    }


语法:

1、字符输出

${emp.name?if_exists}      // 变量存在,输出该变量,否则不输出
${emp.name!}            // 变量存在,输出该变量,否则不输出

${emp.name?default("xxx")}     // 变量不存在,取默认值xxx 
${emp.name!"xxx"}          // 变量不存在,取默认值xxx

常用内部函数:

${"123
456"?html}   // 对字符串进行HTML编码,对html中特殊字符进行转义 ${"str"?cap_first}    // 使字符串第一个字母大写 ${"Str"?lower_case} // 将字符串转换成小写 ${"Str"?upper_case} // 将字符串转换成大写 ${"str"?trim} // 去掉字符串前后的空白字符

字符串的两种拼接方式拼接:

${"hello${emp.name!}"}     // 输出hello+变量名
${"hello"+emp.name!}       // 使用+号来连接,输出hello+变量名

可以通过如下语法来截取子串:

<#assign str = "abcdefghijklmn"/>

// 方法1
${str?substring(0,4)}  // 输出abcd

// 方法2
${str[0]}${str[4]}    // 结果是ae
${str[1..4]}        // 结果是bcde

// 返回指定字符的索引
${str?index_of("n")}

2、日期输出

${emp.date?string('yyyy-MM-dd')} //日期格式

3、数字输出(以数字20为例)

${emp.name?string.number}     // 输出20
${emp.name?string.currency}    // ¥20.00 
${emp.name?string.percent}     // 20%
${1.222?int}            // 将小数转为int,输出1

<#setting number_format="percent"/>    // 设置数字默认输出方式('percent',百分比)
<#assign answer=42/>             // 声明变量 answer 42
#{answer}             // 输出 4,200%
${answer?string}         // 输出 4,200%
${answer?string.number}   // 输出 42
${answer?string.currency}  // 输出 ¥42.00
${answer?string.percent}  // 输出 4,200%
#{answer}            // 输出 42
数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
如下面的例子:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2}    // 输出2.58
#{y; M2}    // 输出4
#{x; m2}    // 输出2.58
#{y; m2}    // 输出4.0
#{x; m1M2}  // 输出2.58
#{x; m1M2}  // 输出4.0

4、申明变量

<#assign foo=false/> // 声明变量,插入布尔值进行显示,注意不要用引号
${foo?string("yes","no")} // 当为true时输出"yes",否则输出"no"

申明变量的几种方式

<#assign name=value> 
<#assign name1=value1 name2=value2 ... nameN=valueN> 
<#assign same as above... in namespacehash>

<#assign name> 
capture this 


<#assign name in namespacehash> 
capture this 

5、if 逻辑判断(注意:elseif 不加空格)

<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
<#else>
...
if>

6、switch (条件可为数字,可为字符串)

<#switch value> 
<#case refValue1> 
....
<#break> 
<#case refValue2> 
....
<#break> 
<#case refValueN> 
....
<#break> 
<#default> 

7、集合 & 循环

// 遍历集合:
<#list empList! as emp> 
    ${emp.name!}
empList?size    // 取集合的长度
emp_index:     // int类型,当前对象的索引值 
emp_has_next:     // boolean类型,是否存在下一个对象

// 集合长度判断 
<#if empList?size != 0>if> // 判断=的时候,注意只要一个=符号,而不是==

// 截取子集合:
empList[3..5] //返回empList集合的子集合,子集合中的元素是empList集合中的第4-6个元素
// seq_contains:判断序列中的元素是否存在
<#assign x = ["red", 16, "blue", "cyan"]> 
${x?seq_contains("blue")?string("yes", "no")}    // yes
${x?seq_contains("yellow")?string("yes", "no")}  // no
${x?seq_contains(16)?string("yes", "no")}        // yes
${x?seq_contains("16")?string("yes", "no")}      // no
// sort_by:排序(升序)
<#list movies?sort_by("showtime") as movie>

// sort_by:排序(降序)
<#list movies?sort_by("showtime")?reverse as movie>

freemarker常见语法大全
FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} 
${book.name?if_exists } //用于判断如果存在,就输出这个值 
${book.name?default(‘xxx’)}//默认值xxx 
${book.name!"xxx"}//默认值xxx 
${book.date?string('yyyy-MM-dd')} //日期格式 
${book?string.number} 20 //三种不同的数字格式 
${book?string.currency}--<#-- $20.00 --> 
${book?string.percent}—<#-- 20% -->
List使用样例-List元素为User对象:  
<#list userList as listUser>   
List对象User Id值:${listUser.userId}   
  
Map使用样例-Map Values元素为Scalar :  
<#list scalarMap?keys as mykey>   
Scalar Map key is :${mykey}   
Scalar Map value is:${scalarMap[mykey]}   
  
Map使用样例-Map Values元素为User对象:  
<#list userMap?keys as key1>   
<#assign mapUser="${userMap[key1]}" >   
User Object is :${mapUser}   
语法:http://blog.csdn.net/hafsky/article/details/5343140




你可能感兴趣的:(后端编程)