文档库 最新最全的文档下载
当前位置:文档库 › FreeMarker基础教程

FreeMarker基础教程

FreeMarker基础教程
FreeMarker基础教程

,FreeMarker基础教程

FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:

1.文本:直接输出的部分

2.注释:<#-- ... -->格式部分,不会输出

3.插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出

4.FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输

下面是一个FreeMarker模板的例子,包含了以上所说的4个部分

Welcome!

<#-- 注释部分 -->

<#-- 下面使用插值 -->

Welcome ${user} !

We have these animals:

<#-- 使用FTL指令 -->

<#list animals as being>

  • ${https://www.wendangku.net/doc/5c15964584.html,} for ${being.price} Euros

    <#list>

    1FTL指令规则

    在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,这和HTML标签是完全类似的.

    1,开始标签:<#directivename parameter>

    2,结束标签:

    3,空标签:<#directivename parameter/>

    实际上,使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号.

    使用FTL标签时, 应该有正确的嵌套,而不是交叉使用,这和XML标签的用法完全一样.如果全用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错

    误消息.FreeMarker会忽略FTL标签中的空白字符.值得注意的是< , /> 和指令之间不允许有空白字符.

    2插值规则

    FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插

    值:#{expr}或#{expr;format}

    2.1通用插值

    对于通用插值,又可以分为以下4种情况:

    1,插值结果为字符串值:直接输出表达式结果

    2,插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:

    <#settion number_format="currency"/>

    <#assign answer=42/>

    ${answer}

    ${answer?string} <#-- the same as ${answer} -->

    ${answer?string.number}

    ${answer?string.currency}

    ${answer?string.percent}

    ${answer}

    输出结果是:

    $42.00

    $42.00

    42

    $42.00

    4,200%

    3,插值结果为日期值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子: ${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}

    ${lastUpdated?string("EEE, MMM d, ''yy")}

    ${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")} 输出结果是:

    2008-04-08 08:08:08 Pacific Daylight Time

    Tue, Apr 8, '03

    Tuesday, April 08, 2003, 08:08:08 PM (PDT)

    4,插值结果为布尔值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:

    <#assign foo=true/>

    ${foo?string("yes", "no")}

    输出结果是:

    yes

    2.2数字格式化插值

    数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是: mX:小数部分最小X位

    MX:小数部分最大X位

    如下面的例子:

    <#assign x=2.582/>

    <#assign y=4/>

    #{x; M2} <#-- 输出2.58 -->

    #{y; M2} <#-- 输出4 -->

    #{x; m2} <#-- 输出2.6 -->

    #{y; m2} <#-- 输出4.0 -->

    #{x; m1M2} <#-- 输出2.58 -->

    #{x; m1M2} <#-- 输出4.0 -->

    3表达式

    表达式是FreeMarker模板的核心功能,表达式放置在插值语法${}之中时,表明

    需要输出表达式的值;表达式语法也可与FreeMarker 标签结合,用于控制输出.

    实际上FreeMarker的表达式功能非常强大,它不仅支持直接指定值,输出变量值,也支持字符串格式化输出和集合访问等功能.

    3.1直接指定值

    使用直接指定值语法让FreeMarker直接输出插值中的值,而不是输出变量值.直接指定值可以是字符串,数值,布尔值,集合和MAP对象.

    1,字符串

    直接指定字符串值使用单引号或双引号限定,如果字符串值中包含特殊字符需要转义,看下面的例子:

    ${"我的文件保存在C:\\盘"}

    ${'我名字是\"annlee\"'}

    输出结果是:

    我的文件保存在C:\盘

    我名字是"annlee"

    FreeMarker支持如下转义字符:

    \";双引号(u0022)

    \';单引号(u0027)

    \\;反斜杠(u005C)

    \n;换行(u000A)

    \r;回车(u000D)

    \t;Tab(u0009)

    \b;退格键(u0008)

    \f;Form feed(u000C)

    \l;<

    \g;>

    \a;&

    \{;{

    \xCode;直接通过4位的16进制数来指定Unicode码,输出该unicode码对应的字符.

    如果某段文本中包含大量的特殊符号,FreeMarker提供了另一种特殊格式:可以在指定字符串内容的引号前增加r标记,在r标记后的文件将会直接输出.看如下代码:

    ${r"${foo}"}

    ${r"C:\foo\bar"}

    输出结果是:

    ${foo}

    C:\foo\bar

    2,数值

    表达式中的数值直接输出,不需要引号.小数点使用"."分隔,不能使用分组","符号.FreeMarker目前还不支持科学计数法,所以"1E3"是错误的.在FreeMarker表达式中使用数值需要注意以下几点:

    1,数值不能省略小数点前面的0,所以".5"是错误的写法

    2,数值8 , +8 , 8.00都是相同的

    3,布尔值

    直接使用true和false,不使用引号.

    4,集合

    集合以方括号包括,各集合元素之间以英文逗号","分隔,看如下的例子:

    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>

    ${x}

    输出结果是:

    星期一

    星期二

    星期三

    星期四

    星期五

    星期六

    星期天

    除此之外,集合元素也可以是表达式,例子如下:

    [2 + 2, [1, 2, 3, 4], "whatnot"]

    还可以使用数字范围定义数字集合,如2..5等同于[2, 3, 4, 5],但是更有效率.注意,使用数字范围来定义集合时无需使用方括号,数字范围也支持反递增的数字范围,如5..2

    5,Map对象

    Map对象使用花括号包括,Map中的key-value对之间以英文冒号":"分隔,多组key-value对之间以英文逗号","分隔.下面是一个例子:

    {"语文":78, "数学":80}

    Map对象的key和value都是表达式,但是key必须是字符串

    3.2输出变量值

    FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性.下面分别讨论这些情况

    1,顶层变量

    所谓顶层变量就是直接放在数据模型中的值,例如有如下数据模型:

    Map root = new HashMap(); //创建数据模型

    root.put("name","annlee"); //name是一个顶层变量

    对于顶层变量,直接使用${variableName}来输出变量值,变量名只能是字母,数字,下划线,$,@和#的组合,且不能以数字开头号.为了输出上面的name的值,可以使用如下语法:

    ${name}

    2,输出集合元素

    如果需要输出集合元素,则可以根据集合元素的索引来输出集合元素,集合元素的索引以方括号指定.假设有索引:

    ["星期一","星期二","星期三","星期四","星期五","星期六","星期天"].该索引名为week,如果需要输出星期三,则可以使用如下语法:

    ${week[2]} //输出第三个集合元素

    此外,FreeMarker还支持返回集合的子集合,如果需要返回集合的子集合,则可

    以使用如下语法:

    week[3..5] //返回week集合的子集合,子集合中的元素是week集合中的第

    4-6个元素

    3,输出Map元素

    这里的Map对象可以是直接HashMap的实例,甚至包括JavaBean实例,对于JavaBean实例而言,我们一样可以把其当成属性为key,属性值为value的Map

    实例.为了输出Map元素的值,可以使用点语法或方括号语法.假如有下面的数据模型:

    Map root = new HashMap();

    Book book = new Book();

    Author author = new Author();

    author.setName("annlee");

    author.setAddress("gz");

    book.setName("struts2");

    book.setAuthor(author);

    root.put("info","struts");

    root.put("book", book);

    为了访问数据模型中名为struts2的书的作者的名字,可以使用如下语法: https://www.wendangku.net/doc/5c15964584.html, //全部使用点语法

    book["author"].name

    book.author["name"] //混合使用点语法和方括号语法

    book["author"]["name"] //全部使用方括号语法

    使用点语法时,变量名字有顶层变量一样的限制,但方括号语法没有该限制,因为名字可以是任意表达式的结果.

    3.3字符串操作

    FreeMarker的表达式对字符串操作非常灵活,可以将字符串常量和变量连接起来,也可以返回字符串的子串等.

    字符串连接有两种语法:

    1,使用${..}或#{..}在字符串常量部分插入表达式的值,从而完成字符串连接.

    2,直接使用连接运算符+来连接字符串

    例如有如下数据模型:

    Map root = new HashMap(); root.put("user","annlee");

    下面将user变量和常量连接起来:

    ${"hello, ${user}!"} //使用第一种语法来连接

    ${"hello, " + user + "!"} //使用+号来连接

    上面的输出字符串都是hello,annlee!,可以看出这两种语法的效果完全一样.

    值得注意的是,${..}只能用于文本部分,不能用于表达式,下面的代码是错误的: <#if ${isBig}>Wow!

    <#if "${isBig}">Wow!

    应该写成:<#if isBig>Wow!

    截取子串可以根据字符串的索引来进行,截取子串时如果只指定了一个索引值,

    则用于取得字符串中指定索引所对应的字符;如果指定两个索引值,则返回两个

    索引中间的字符串子串.假如有如下数据模型:

    Map root = new HashMap(); root.put("book","struts2,freemarker");

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

    ${book[0]}${book[4]} //结果是su

    ${book[1..4]} //结果是tru

    3.4集合连接运算符

    这里所说的集合运算符是将两个集合连接成一个新的集合,连接集合的运算符是+,看如下的例子:

    <#list ["星期一","星期二","星期三"] + ["星期四","星期五","星期六","星期天"] as x>

    ${x}

    输出结果是:星期一星期二星期三星期四星期五星期六星期天

    3.5Map连接运算符

    Map对象的连接运算符也是将两个Map对象连接成一个新的Map对象,Map对象的连接运算符是+,如果两个Map对象具有相同的key,则右边的值替代左边的值.看如下的例子:

    <#assign scores = {"语文":86,"数学":78} + {"数学":87,"Java":93}>

    语文成绩是${scores.语文}

    数学成绩是${scores.数学}

    Java成绩是${scores.Java}

    输出结果是:

    语文成绩是86

    数学成绩是87

    Java成绩是93

    3.6算术运算符

    FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , % 看如下的代码:

    <#assign x=5>

    ${ x * x - 100 }

    ${ x /2 }

    ${ 12 %10 }

    输出结果是:

    -75 2.5 2

    在表达式中使用算术运算符时要注意以下几点:

    1,运算符两边的运算数字必须是数字

    2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + "5"},结果是:35

    使用内建的int函数可对数值取整,如:

    <#assign x=5>

    ${ (x/2)?int }

    ${ 1.1?int }

    ${ 1.999?int }

    ${ -1.1?int }

    ${ -1.999?int }

    结果是:2 1 1 -1 -1

    3.7比较运算符

    表达式中支持的比较运算符有如下几个:

    1,=或者==:判断两个值是否相等.

    2,!=:判断两个值是否不等.

    3,>或者gt:判断左边值是否大于右边值

    4,>=或者gte:判断左边值是否大于等于右边值

    5,<或者lt:判断左边值是否小于右边值

    6,<=或者lte:判断左边值是否小于等于右边值

    注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为 FreeMarker会把>解释成FTL 标签的结束字符,当然,也可以使用括号来避免这种情况,如:<#if (x>y)>

    3.8逻辑运算符

    逻辑运算符有如下几个:

    逻辑与:&&

    逻辑或:||

    逻辑非:!

    逻辑运算符只能作用于布尔值,否则将产生错误

    3.9内建函数

    FreeMarker还提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可以通过内建函数来轮换输出变量.下面是常用的内建的字符串函数:

    html:对字符串进行HTML编码

    cap_first:使字符串第一个字母大写

    lower_case:将字符串转换成小写

    upper_case:将字符串转换成大写

    trim:去掉字符串前后的空白字符

    下面是集合的常用内建函数

    size:获取序列中元素的个数

    下面是数字值的常用内建函数

    int:取得数字的整数部分,结果带符号

    例如:

    <#assign test="Tom & Jerry">

    ${test?html}

    ${test?upper_case?html}

    结果是:Tom & Jerry TOM & JERRY

    3.10空值处理运算符

    FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null 值,null值和不存在的变量完全相同.

    为了处理缺失变量,FreeMarker提供了两个运算符:

    !:指定缺失变量的默认值

    ??:判断某个变量是否存在

    其中,!运算符的用法有如下两种:

    variable!或variable!defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象.

    使用!指定默认值时,并不要求默认值的类型和变量类型相同.使用??运算符非常简单,它总是返回一个布尔值,用法为:variable??,如果该变量存在,返回true,否则返回false

    3.11运算符的优先级

    FreeMarker中的运算符优先级如下(由高到低排列):

    1,一元运算符:!

    2,内建函数:?

    3,乘除法:*, / , %

    4,加减法:- , +

    5,比较:> , < , >= , <= (lt , lte , gt , gte)

    6,相等:== , = , !=

    7,逻辑与:&&

    8,逻辑或:||

    9,数字范围:..

    实际上,我们在开发过程中应该使用括号来严格区分,这样的可读性好,出错少

    4FreeMarker的常用指令

    FreeMarker的FTL指令也是模板的重要组成部分,这些指令可实现对数据模型所包含数据的抚今迭代,分支控制.除此之外,还有一些重要的功能,也是通过FTL 指令来实现的.

    4.1if指令

    这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if 指令的语法格式如下:

    <#if condition>...

    <#elseif condition>...

    <#elseif condition>...

    <#else> ...

    例子如下:

    <#assign age=23>

    <#if (age>60)>老年人

    <#elseif (age>40)>中年人

    <#elseif (age>20)>青年人

    <#else> 少年人

    输出结果是:青年人

    上面的代码中的逻辑表达式用括号括起来主要是因为里面有>符号,由于FreeMarker会将>符号当成标签的结束字符,可能导致程序出错,为了避免这种情况,我们应该在凡是出现这些符号的地方都使用括号.

    4.2switch , case , default , break指令

    这些指令显然是分支指令,作用类似于Java的switch语句,switch指令的语法结构如下:

    <#switch value>

    <#case refValue>...<#break>

    <#case refValue>...<#break>

    <#default>...

    4.3list, break指令

    list指令是一个迭代输出指令,用于迭代输出数据模型中的集合,list指令的语法格式如下:

    <#list sequence as item>

    ...

    上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量:

    item_index:当前变量的索引值

    item_has_next:是否存在下一个对象

    也可以使用<#break>指令跳出迭代

    例子如下:

    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>

    ${x_index + 1}.${x}<#if x_has_next>,

    <#if x="星期四"><#break>

    4.4include指令

    include指令的作用类似于JSP的包含指令,用于包含指定页.include指令的语法格式如下:

    <#include filename [options]>

    在上面的语法格式中,两个参数的解释如下:

    filename:该参数指定被包含的模板文件

    options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true.

    4.5import指令

    该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map 对象中,import指令的语法格式如下:

    <#import "/lib/common.ftl" as com>

    上面的代码将导入/lib/common.ftl模板文件中的所有变量,交将这些变量放置

    在一个名为com的Map对象中.

    4.6noparse指令

    noparse指令指定FreeMarker不处理该指定里包含的内容,该指令的语法格式如下:

    <#noparse>...

    看如下的例子:

    <#noparse>

    <#list books as book>

    ${https://www.wendangku.net/doc/5c15964584.html,}作者:${book.author}

    输出如下:

    <#list books as book>

    ${https://www.wendangku.net/doc/5c15964584.html,}作者:${book.author}

    4.7escape , noescape指令

    escape指令导致body区的插值都会被自动加上escape表达式,但不会影响字符串内的插值,只会影响到body内出现的插值,使用escape指令的语法格式如下: <#escape identifier as expression>...

    <#noescape>...

    看如下的代码:

    <#escape x as x?html>

    First name:${firstName}

    Last name:${lastName}

    Maiden name:${maidenName}

    上面的代码等同于:

    First name:${firstName?html}

    Last name:${lastName?html}

    Maiden name:${maidenName?html}

    escape指令在解析模板时起作用而不是在运行时起作用,除此之外,escape指令也嵌套使用,子escape继承父escape的规则,如下例子:

    <#escape x as x?html>

    Customer Name:${customerName}

    Items to ship;

    <#escape x as itemCodeToNameMap[x]>

    ${itemCode1}

    ${itemCode2}

    ${itemCode3}

    ${itemCode4}

    上面的代码类似于:

    Customer Name:${customerName?html}

    Items to ship;

    ${itemCodeToNameMap[itemCode1]?html}

    ${itemCodeToNameMap[itemCode2]?html}

    ${itemCodeToNameMap[itemCode3]?html}

    ${itemCodeToNameMap[itemCode4]?html}

    对于放在escape指令中所有的插值而言,这此插值将被自动加上escape表达式,如果需要指定escape指令中某些插值无需添加escape表达式,则应该使用noescape指令,放在noescape指令中的插值将不会添加escape表达式.

    4.8assign指令

    assign指令在前面已经使用了多次,它用于为该模板页面创建或替换一个顶层

    变量,assign指令的用法有多种,包含创建或替换一个顶层变量, 或者创建或替换多个变量等,它的最简单的语法如下:<#assign name=value [in namespacehash]>,这个用法用于指定一个名为name的变量,该变量的值为value,此外,FreeMarker允许在使用 assign指令里增加in子句,in子句用于将创建的name变量放入namespacehash命名空间中.

    assign指令还有如下用法:<#assign name1=value1 name2=value2 ...

    nameN=valueN [in namespacehash]>,这个语法可以同时创建或替换多个顶层变量,此外,还有一种复杂的用法,如果需要创建或替换的变量值是一个复杂的表达式,则可以使用如下语法格式:<#assign name [in namespacehash]>capture this,在这个语法中,是指将assign指令的内容赋值给name变量.如下例子:

    <#assign x>

    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>

    ${n}

    ${x}

    上面的代码将产生如下输出:星期一星期二星期三星期四星期五星期六星期天

    虽然assign指定了这种复杂变量值的用法,但是我们也不要滥用这种用法,如下例子:<#assign x>Hello ${user}!,以上代码改为如下写法更合适:<#assign x="Hello ${user}!">

    4.9setting指令

    该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:<#setting name=value>,在这个格式中,name的取值范围包含如下几个:

    locale:该选项指定该模板所用的国家/语言选项

    number_format:指定格式化输出数字的格式

    boolean_format:指定两个布尔值的语法格式,默认值是true,false

    date_format,time_format,datetime_format:指定格式化输出日期的格式

    time_zone:设置格式化输出日期时所使用的时区

    4.10macro , nested , return指令

    macro可以用于实现自定义指令,通过使用自定义指令,可以将一段模板片段定义成一个用户指令,使用macro指令的语法格式如下:

    <#macro name param1 param2 ... paramN>

    ...

    <#nested loopvar1, loopvar2, ..., loopvarN>

    ...

    <#return>

    ...

    在上面的格式片段中,包含了如下几个部分:

    name:name属性指定的是该自定义指令的名字,使用自定义指令时可以传入多个参数

    paramX:该属性就是指定使用自定义指令时报参数,使用该自定义指令时,必须为这些参数传入值

    nested指令:nested标签输出使用自定义指令时的中间部分

    nested指令中的循环变量:这此循环变量将由macro定义部分指定,传给使用标签的模板

    return指令:该指令可用于随时结束该自定义指令.

    看如下的例子:

    <#macro book> //定义一个自定义指令

    j2ee

    <@book /> //使用刚才定义的指令

    上面的代码输出结果为:j2ee

    在上面的代码中,可能很难看出自定义标签的用处,因为我们定义的book指令所包含的内容非常简单,实际上,自定义标签可包含非常多的内容,从而可以实现更好的代码复用.此外,还可以在定义自定义指令时,为自定义指令指定参数,看如下代码:

    <#macro book booklist> //定义一个自定义指令booklist是参数

    <#list booklist as book>

    ${book}

    <@book booklist=["spring","j2ee"] /> //使用刚刚定义的指令

    上面的代码为book指令传入了一个参数值,上面的代码的输出结果为:spring j2ee

    不仅如此,还可以在自定义指令时使用nested指令来输出自定义指令的中间部分,看如下例子:

    <#macro page title>

    FreeMarker示例页面 - ${title?html}

    ${title?html}

    <#nested> //用于引入用户自定义指令的标签体

    上面的代码将一个HTML页面模板定义成一个page指令,则可以在其他页面中如此page指令:

    <#import "/common.ftl" as com> //假设上面的模板页面名为common.ftl,导入页面

    <@com.page title="book list">

  • spring
  • j2ee
  • 从上面的例子可以看出,使用macro和nested指令可以非常容易地实现页面装饰效果,此外,还可以在使用nested指令时,指定一个或多个循环变量,看如下代码:

    <#macro book>

    <#nested 1> //使用book指令时指定了一个循环变量值

    <#nested 2>

    <@book ;x> ${x} .图书

    当使用nested指令传入变量值时,在使用该自定义指令时,就需要使用一个占位符(如book指令后的;x).上面的代码输出文本如下:

    1 .图书

    2 .图书

    在nested指令中使用循环变量时,可以使用多个循环变量,看如下代码:

    <#macro repeat count>

    <#list 1..count as x> //使用nested指令时指定了三个循环变量

    <#nested x, x/2, x==count>

    <@repeat count=4 ; c halfc last>

    ${c}. ${halfc}<#if last> Last!

    上面的输出结果为:

    1. 0.5

    2. 1

    3. 1.5

    4. 2 Last;

    return指令用于结束macro指令,一旦在macro指令中执行了return指令,则FreeMarker不会继续处理macro指令里的内容,看如下代码:

    <#macro book>

    spring

    <#return>

    j2ee

    <@book />

    上面的代码输出:spring,而j2ee位于return指令之后,不会输出.

    if, else, elseif

    switch, case, default, break

    list, break

    include

    Import

    compress

    escape, noescape

    assign

    global

    setting

    macro, nested, return

    5一些常用方及注意事项

    5.1概念

    最常用的3个概念

    sequence 序列,对应java里的list、数组等非键值对的集合

    hash 键值对的集合

    namespace 对一个ftl文件的引用,利用这个名字可以访问到该ftl文件的资源5.2指令

    if, else, elseif

    语法

    <#if condition>

    ...

    <#elseif condition2>

    ...

    <#elseif condition3>

    ...

    ...

    <#else>

    ...

    用例

    <#if x = 1>

    x is 1

    <#if x = 1>

    x is 1

    <#else>

    x is not 1

    switch, case, default, break

    语法

    <#switch value>

    <#case refValue1>

    ...

    <#break>

    <#case refValue2>

    ...

    <#break>

    ...

    <#case refValueN>

    ...

    <#break>

    <#default>

    ...

    用例

    字符串

    <#switch being.size>

    <#case "small">

    This will be processed if it is small <#break>

    <#case "medium">

    This will be processed if it is medium <#break>

    <#case "large">

    This will be processed if it is large <#break>

    <#default>

    This will be processed if it is neither

    数字

    <#switch x>

    <#case x = 1>

    1

    <#case x = 2>

    2

    <#default>

    d

    如果x=1 输出 1 2, x=2输出 2, x=3 输出d

    list, break

    语法

    <#list sequence as item>

    ...

    <#if item = "spring"><#break>

    ...

    关键字

    item_index:是list当前值的下标

    item_has_next:判断list是否还有值

    用例

    <#assign seq = ["winter", "spring", "summer", "autumn"]>

    <#list seq as x>

    ${x_index + 1}. ${x}<#if x_has_next>,

    输出

    1. winter,

    2. spring,

    3. summer,

    4. autumn

    include

    语法

    <#include filename>

    or

    <#include filename options>

    options包含两个属性

    encoding=”GBK”编码格式

    parse=true 是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在ftl文件里布尔值都是直接赋值的如parse=true,而不是parse=”true”用例

    /common/copyright.ftl包含内容

    Copyright 2001-2002 ${me}

    All rights reserved.

    模板文件

    <#assign me = "Juila Smith">

    Some test

    Yeah.


    <#include "/common/copyright.ftl" encoding=”GBK”>

    输出结果

    Some test

    Yeah.

    Spring2.5、Struts2.1、Hibernate3.2、sitemesh、freemarker整合开发常见问题及解决方案

    1.在搭建SSH开发平台的时候,由MyEclipse自动导入的包存在一些冲突,主要有 (1) asm.jar与asm-2.2.3.jar asm-2.2.3是spring所依赖,而asm.jar是hibernate依赖的,应该删除asm-2.2.3.jar这个包 (2). commons-logging-1.0.4.jar与commons-logging-api-1.1.jar 这两个包中commons-logging-1.0.4.jar是spring和hibernate以及struts都要用的包,但是struts2.1以上的版本还需要commons-logging-api-1.1.jar,其实这两个包几乎一样,commons-logging-api-1.1.jar版本较新而已。 (3)异常 严重: Exception starting filter struts2 https://www.wendangku.net/doc/5c15964584.html,ng.NullPointerException at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectF actory.java:203) ... 可能的原因是spring的默认配置文件applicationContext.xml改了名,或者没有放在classpath的根路径下面,并且没有在web.xml文件中配置spring的监听器,解决办法在web.xml中添加

    org.springframework.web.context.ContextLoaderListener (4)异常 严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml] 可能的原因是虽然配置了spring的监听器,但是没有在web.xml中配置contextConfigLocation来指定spring配置文件列表及相应的具体路径。解决的办法是在web.xml文件中添加,例如: contextConfigLocation /WEB-INF/csdn-spring*.xml (5)异常 org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection 可能的原因是缺少相应的JDBC驱动包,请把驱动包拷贝到/WEB-INF/lib下面,或者是数据源的配置有问题,例如用户名、者密码或者URL错误。

    AERMOD中文参考手册

    大气环境影响预测系统使用者参考手册 一、简介 大气环境影响预测系统是一款由浙江省环科院环评二所任剑波工程师开发的预测大气环境影响的界面化软件,其主要功能是对各类型污染源在不同条件下排放污染物进行模拟,计算其所造成的污染物地面浓度分布,用量化的方法预测污染源对大气环境的影响。 大气环境影响预测系统的核心模块采用《环境影响评价技术导则-大气环境》(HJ2.2-2008)推荐的美国Environmental Protection Agency的AERMOD预测模型和SCREEN3估算模式。AERMOD是一个稳态羽烟扩散模式,可基于大气边界层数据特征模拟点源、面源、体源等排放出的污染物在短期(小时平均、日平均)、长期(年平均)的浓度分布,适用于农村或城市地区、简单或复杂地形。AERMOD考虑了建筑物尾流的影响,即烟羽下洗。模式使用每小时连续预处理气象数据模拟大于等于1小时平均时间的浓度分布。AERMOD包括两个预处理模式,即AERMET气象预处理和AERMAP地形预处理模式。AERMOD适用于评价范围小于等于50km的一级、二级评价项目。 估算模式SCREEN3 是一个单源高斯烟羽模式,可计算点源、火炬源、面源和体源的最大地面浓度,以及下洗和岸边熏烟等特殊条件下的最大地面浓度。估算模式中嵌入了多种预设的气象组合条件,包括一些最不利的气象条件,在某个地区有可能发生,也有可能没有此种不利气象条件。所以经估算模式计算出的是某一污染源对环境空气质量的最大影响程度和影响范围的保守的计算结果。 二、操作界面介绍 大气环境影响预测系统界面非常友好,继承了windows操作系统软件的特点。其最上方为命令菜单;在命令菜单的下方是快捷工具栏;左侧区域为目标管理窗口,可以更加方便的进行输入和管理预测模型所需的各类参数数据;右侧区域为工作区,用户可在此直接操作,例如添加底图,标明污染源、计算区域和预测点位置等。 1.菜单栏 本软件操作界面中的菜单栏分为文件、显示、运行、计算结果、工具和关于六项。各命令菜单包含的内容如下: ·文件 新建; 打开; 保存; 另存为; 保存inp文件; 打开示例文件; 退出 ·显示 污染源; 预测点; 计算网格; 建筑物; 显示标尺;

    Spring中文开发详细手册

    Spring开发教程 Spring教程 (1) Spring框架概述 (2) Spring是什么? (2) Spring的历史 (3) Spring的使命(Mission Statement) (3) Spring受到的批判 (3) Spring包含的模块 (4) 总结 (5) Spring的IoC容器 (6) 用户注册的例子 (6) 面向接口编程 (7) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (9) 重构第四步-IoC容器 (10) 控制反转(IoC)/依赖注入(DI) (10) 什么是控制反转/依赖注入? (10) 依赖注入的三种实现形式 (11) BeanFactory (13) BeanFactory管理Bean(组件)的生命周期 (14) Bean的定义 (15) Bean的之前初始化 (19) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问 (21) Spring的声明式事务 (21) Spring对其它企业应用支持 (22)

    名词解释 容器: 框架: 框架 容器 组件: 服务: Spring框架概述 主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。 目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。 Spring是什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ?目的:解决企业应用开发的复杂性 ?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ?范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实

    ftl编辑器(freemarker)的使用和说明

    一、准备工作 1.1 下载文件 可以从https://www.wendangku.net/doc/5c15964584.html,/站点下载最新的freemarker.jar包(目前最新版本是2.3.18)与eclipse插件(最新版本是0.9.14)。 1.2 安装eclipse插件 将下载来的eclipse插件解压缩到本地磁盘,更改hudson.freemarker_ide_0.9.14文件夹中的freemarker-2.3.6.jar文件更改成最新版本的freemarker-2.3.18.jar,并且将META-INF/MANIFEST.MF文件中的Bundle-ClassPath属性值修改为freemarker-2.3.18.jar。最后将hudson.freemarker_ide_0.9.14放到eclipse的plugins目录中,完成eclipse 插件的安装。 1.3 freemarker文档下载 从https://www.wendangku.net/doc/5c15964584.html,/官方网站中下载帮助文档(也有中文的手册) 二、freemarker的使用 2.1 简介 2.1.1 FTL tag标签 由于freemarker tag标签是属于freemarker的指令,它们仅仅是freemarker 处理过程中的信息,而不会输出到页面上,所以它们与html标签有一些区别。这些标签都是以#号开头,如<#import "/public/work_public.ftl" as public>。但用户自定义的标签是以@符号开头,如在freemarker中使用struts标签:<@s.if test="results!=null&&results.size()!=0"> 注意FTL标签不可以在其他FTL标签和插值中使用(注释可以在FTL标签和插值中使用,因为它在解析时,整个注释都将抛弃,不会影响具体代码),如下面这样就是一个错误的写法: <#if <#include 'foo'>='bar'>... 2.1.2 注释 freemarker的文档注释与html相似,但它是以<#--和-->来分割的。任何介于这两个分隔符(包含分隔符本身)之间内容会被freemarker忽略,就不会输出出来了。其他任何不是FTL 标签,插值或注释的内容将被视为静态文本,这些东西就不会被freemarker所解析,会被按照原样输出出来。

    freemarker语法

    语法 FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1. 文本:直接输出的部分 2. 注释:<#-- ... -->格式部分,不会输出 3. 插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4. FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出 1. FTL指令规则 在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,这和HTML标签是完全类似的. 1.开始标签:<#directivename parameter> 2.结束标签: 3.空标签:<#directivename parameter/> 实际上,使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号. 使用FTL标签时, 应该有正确的嵌套,而不是交叉使用,这和XML标签的用法完全一样.如果全用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错误消息.FreeMarker会忽略FTL标签中的空白字符.值得注意的是< , /> 和指令之间不允许有空白字符. 2. 插值规则 FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} 2.1 通用插值 对于通用插值,又可以分为以下4种情况: 1. 插值结果为字符串值:直接输出表达式结果 2. 插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输 出.可以使用内建的字符串函数格式化单个插值,如下面的例子: <#settion number_format="currency"/> <#assign answer=42/> ${answer} ${answer?string} <#-- the same as ${answer} --> ${answer?string.number} ${answer?string.currency} ${answer?string.percent}

    TRSMASv5.0置标使用手册

    媒资管理系统Array TRS Media Asset System 置标使用手册 北京拓尔思信息技术股份有限公司 Beijing TRS Information Technology Co., Ltd.

    版权说明 本手册由北京拓尔思信息技术股份有限公司(以下简称TRS公司)出版,版权属TRS公司所有。未经出版者正式书面许可,不得以任何方式复制本文档的部分或全部内容。 ?北京拓尔思信息技术股份有限公司版权所有。保留所有权利。 是北京拓尔思信息技术股份有限公司的注册商标。

    关于本手册 置标使用手册介绍了MAS5.0中置标组件的基本使用,并提供了相关实例,方便理解置标模板的编写以及使用,进而完成前台页面定制功能。 读者对象 本手册的读者为TRSMAS的使用者。使用者应具备以下基础知识: ●熟悉Windows或Linux操作系统; ●熟悉Oracle、MySQL、Microsoft SQL Server; ●熟悉HTML基本知识 ●掌握基本的编程技巧 用户反馈 TRS公司感谢您使用TRS 产品。如果您发现本手册中有错误或者产品运行不正确,或者您对本手册有任何意见和建议,请及时与TRS公司联系。您的意见将是我们做版本修订时的重要依据

    目录 第1章概述 (1) 第2章使用说明 (2) 2.1快速入门 (2) 2.2管理台使用 (3) 2.2.1 站点(Site) (3) 2.2.2 映射(Pagelink) (3) 2.2.3 模板(Template) (4) 2.3站点规划 (5) 2.3.1 站点规划 (5) 2.3.2 映射规划 (5) 2.4模板规划 (6) 2.4.1 将主页面划分成块 (6) 2.4.2 使用TRS_PAGELET填充各块 (7) 2.4.3 编写小模板 (9) 2.4.4 完善TRS_PAGELET的属性 (9) 2.4.5 切换模板展示方式 (11) 2.5获取相关模板实例 (13) 第3章置标详细参考 (14) 3.1置标规范实例 (14) 3.1.1 OBJECTS - PROPERTY(一组数据) (14) 3.1.2 OBJECT - PROPERTY (一个数据) (15) 3.1.3 OBJECTS – (PROPERTY + PAGE)(组数据分页展示) (15) 3.1.4 OBJECTS –OBJECT –PROPERTY (折行显示列表数据) (16) 3.1.5 OBJECTS-(PROPERTY+OBJECTS-PROPERTY)(树状) (17) 3.1.6 OBJECTS-SWITCH-PROPERTY(条件显示) (18) 3.1.7 LINKGROUP – LINK链接着色 (19) 3.2置标详细说明 (19) 3.2.1 TRS_OBJECTS置标 (19) 3.2.2 TRS_OBJECT置标 (20) 3.2.3 TRS_PROPERTY置标 (21) 3.2.4 TRS_PAGE置标 (23) 3.2.5 TRS_SWITCH置标 (24) 3.2.6 TRS_LOOP置标 (25) 3.2.7 TRS_LINKGROUP置标 (26) 3.2.8 TRS_LINK置标 (28) 3.2.9 TRS_PAGELET置标 (28)

    freemarker中文手册文档

    FreeMarker FreeMarker Java FreeMarker HTML Web MVC FreeMarker Java FreeMarker FreeMarker Web Web FreeMarker HTTP Servlet FreeMarker Web FreeMarker Model2 Struts JSP FreeMarker 1

    HTML XML RTF Java Servlet Email Web Web 2 include if/elseif/else HTML 3 FreeMarker Java Java JavaBean XML SQL

    4 Web Web HTML Model2 Web JSP JSP MVC 5 UNICODE US 6 XML <#recurse> <#visit> 2.3 XML XML FreeMarker (1)

    1 1 + = FreeMarker —— HTML Web Web HTML FreeMarker Welcome!

    Welcome ${user}!

    Our latest product: ${https://www.wendangku.net/doc/5c15964584.html,}!

    HTML ${…} FreeMarker FreeMarker Template user latestProduct.url https://www.wendangku.net/doc/5c15964584.html, data model (root) | +- user = "Big Joe" | +- latestProduct | +- url = "products/greenmouse.html" | +- name = "green mouse" latestProduct user url name url name latestProduct

    freemarkermacro(宏)的使用

    FreeMarker macro(宏)的使用.txt14热情是一种巨大的力量,从心灵内部迸发而出,激励我们发挥出无穷的智慧和活力;热情是一根强大的支柱,无论面临怎样的困境,总能催生我们乐观的斗志和顽强的毅力……没有热情,生命的天空就没的色彩。FreeMarker macro(宏)的使用 有人说用freemarker,但没有用到它的宏(macro),就=没有真正用过freemarker。说的就是宏是freemarker的一大特色。 宏的定义可以查看相关的文档,里面介绍得很清楚,下面来看看它的一个用法(javaeye 帖子里有讨论)。 /WEB-INF/template/common/: <#macro html title> ${title} <#nested/> 然后在里定义: auto_import=/WEB-INF/template/common/ as c 然后其他的ftl文件就可以使用它了 : title="OA"> 你的内容 > 如果不在里定义,可以在每个文件里包含这个ftl: <#import "/WEB-INF/template/common/" as c> 不同的场合有不同的运用。使用得好的话,将会大大节省你的开发时间。 macro, nested, return 语法

    freemarker中文API手册

    FreeMarker概述 ●FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java 编写 ●FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序●虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由 FreeMarker生成页面,通过模板显示准备的数据(如下图) ●FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件 ●FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应 用于非Web应用程序环境 ●FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使 用JSP标记库 ●FreeMarker是免费的 1、通用目标 ●能够生成各种文本:HTML、XML、RTF、Java源代码等等 ●易于嵌入到你的产品中:轻量级;不需要Servlet环境 ●插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等 ●你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送 它返回给Web浏览器 2、强大的模板语言 ●所有常用的指令:include、if/elseif/else、循环结构 ●在模板中创建和改变变量 ●几乎在任何地方都可以使用复杂表达式来指定值 ●命名的宏,可以具有位置参数和嵌套内容 ●名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心 名字冲突 ●输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等; 你可以定义自己的转换 3、通用数据模型 ●FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在

    Freemarker教程 中文版

    FreeMarker2.3.10 ―Programmer's Guide(中文版)

    前言 (3) 一、快速入门 (4) 1.1、创建配置实例 (4) 1.2、创建数据模型(Data Model) (4) 1.3、获取模版(template) (5) 1.4、把模版与数据模型合并 (6) 1.5、完整的代码 (6) 二、数据模型(Data Model) (7) 2.1、基础类型 (7) 2.2、Scalar类型(单值对应的Data Model) (8) 2.3、容器类型 (8) 2.4、方法变量 (9) 2.5、转换器变量 (10) 2.6、节点变量 (12) 2.7、对象包裹 (12) 三、配置(Configuration) (15) 3.1、基础 (15) 3.2、共享变量 (15) 3.3、配置参数 (16) 3.4、加载模板 (17) 3.5、异常处理 (19) 四、其它说明 (20) 4.1、变量 (20) 4.2、字符编码 (20) 4.3、多线程 (21) 4.5、Bean包裹 (21)

    前言 FreeMarker官方参考文档总共有四份,它们分别是 ●Designer's Guide(网上已有翻译,主要从FreeMarker的概念上介绍) ●Programmer's Guide(本文档所以翻译的部分,主要从框架的设计方面介绍) ●XML Processing Guide(对XML数据模型处理的介绍) ●Reference(FreeMarker的参考文档,语言使用介绍) 中文翻译之所以选择Programmer's Guide是因为个人觉得该部分对如何实现FreeMarker进行了比较深入的阐述。有助于读者很好的了解其运作机制,以及去理解其他模板引擎(如Velocity)的工作机理。 注:由于原文档部分内容直译可能难于被读者理解,所以有些地方采用意译为主,因此在翻译用词上难免可能会有出入,大家对翻译的内容有任何意见都可以给我直接发邮件告知motomagice@https://www.wendangku.net/doc/5c15964584.html,

    freemarker中文手册

    FreeMarker概述

    FreeMarker概述 ●FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java 编写 ●FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序●虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由 FreeMarker生成页面,通过模板显示准备的数据(如下图) ●FreeMarker不是一个W eb应用框架,而适合作为W eb应用框架一个组件 ●FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应 用于非W eb应用程序环境 ●FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使 用JSP标记库 ●FreeMarker是免费的 1、通用目标 ●能够生成各种文本:HTML、XML、RTF、Java源代码等等 ●易于嵌入到你的产品中:轻量级;不需要Servlet环境 ●插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等 ●你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送 它返回给Web浏览器 2、强大的模板语言 ●所有常用的指令:include、if/elseif/else、循环结构 ●在模板中创建和改变变量 ●几乎在任何地方都可以使用复杂表达式来指定值 ●命名的宏,可以具有位置参数和嵌套内容 ●名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心 名字冲突 ●输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等; 你可以定义自己的转换 3、通用数据模型 ●FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在

    SSD1289中文手册

    SSD1289

    1 概述 SSD1289是集成RAM、电源电路、门驱动器、驱动源于一体的TFTLCD驱动控制器。它最大可驱动分辨率为240×320的26.2万色RGB非晶TFT面板。 SSD1289同样集成了控制功能。其包括172800字节的图形显示数据区。因此,通过兼容的并行或串行接口,它可以与像6800及8080系列的8-/9-/16-/18位通用微控制器接口,将数据写入图形显示数据区。另外,集成辅助的18-/16-/6位的视频接口用于动画图像的显示。 SSD1289嵌入了DC-DC变压器和电压转换器,用于提供芯片驱动所有外部底层元件所必需的电压。芯片包含的一个通用电压发生电路用于驱动TFT显示器的反电极。另外还有一个整合的伽马控制电路,用于配合软指令以提供最大的灵活性和最佳的显示效果。 DS1289工作的最低电压能低到1.16V,同时提供不同的节电模式。它适用于任何需要长时间运行的,用便携式电池驱动的紧凑型设备。 2 特点 ●工作电压:V DD = 1.65V-1.95V (不规则的逻辑输入) = 1.4V-3.6V (规则的逻辑输入) V DDIO = 2.5V-3.6V (内部模拟电路的电源供应) V CI ●最大的门驱动输出电压:30Vp-p ●驱动源输出电压:0-5V ●低电流睡眠模式和8-color节能显示模式 ●显示尺寸:240RGB×320 ●显示颜色支持:26.2万色RGB非晶TFT面板 ●8/9/16/18位的6800系列/8080系列的并行接口和串行接口 ●支持动画显示的18位RGB接口(VSYNC, HSYNC, DOTCLK, DEN, and D0-17)●片上172800字节的图形显示数据区 ●RAM写同步功能 ●支持线性和帧转换 ●软件可选中心滚屏、顶部滚屏、底部滚屏和全部滚屏。 ●Source and Gate scan direction control ●片内电平发生器 ●片内电压转换器高达6x/-6x ●可编程的伽马矫正曲线 ●对VCOM标准的稳定存储 ●可编程的公共电极电压幅度和一般结构的Cs水平 ●支持Cs的门结构 ●COG包可用 3 订购信息 4 结构图

    FreeMarker使用介绍

    1、快速入门
    (1)模板+数据模型=输出 模板+数据模型= FreeMarker 基于设计者和程序员是具有不同专业技能的不同个体的观念 他们是分工劳动的:设计者专注于表示——创建 HTML 文件、图片、Web 页面的其它 可视化方面;程序员创建系统,生成设计页面要显示的数据 经常会遇到的问题是:在 Web 页面(或其它类型的文档)中显示的信息在设计页面 时是无效的,是基于动态数据的 在这里,你可以在 HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker 会在输出页面给最终用户时,用适当的数据替代这些代码 下面是一个例子:
    Welcome!

    Welcome${user}!

    Our latest product: ${https://www.wendangku.net/doc/5c15964584.html,}!
    这个例子是在简单的 HTML 中加入了一些由${…} ${…}包围的特定代码,这些特定代码是 ${…} FreeMarker 的指令,而包含 FreeMarker 的指令的文件就称为模板(Template) 至于 user、latestProduct.url 和 https://www.wendangku.net/doc/5c15964584.html, 来自于数据模型(data model) 数据模型由程序员编程来创建,向模板提供变化的信息,这些信息来自于数据库、 文件,甚至于在程序中直接生成 模板设计者不关心数据从那儿来,只知道使用已经建立的数据模型 下面是一个可能的数据模型:
    (root) | +- user = "Big Joe" | +- latestProduct | +- url = "products/greenmouse.html" |

    thymeleaf 中文文档

    Thymeleaf的首个稳定版(1.0.0版)已经于上月17日发布了。Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。它是个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,Daniel Fernández还是Java加密库Jasypt 的作者。Thymeleaf旨在替换掉JSP及其他的模板引擎,如Velocity与FreeMarker。它提供了两个版本,分别是Standard方言与SpringStandard(Spring MVC 3)方言,并且可以通过创建自定义方言进行扩展。 Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM (文档对象模型)上执行预先制定好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。 那么Thymeleaf与其他流行的模板引擎如Velocity和FreeMarker相比如何呢?Thymeleaf是与众不同的,因为它使用了自然的模板技术。这意味着Thymeleaf的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档。模板还可以用作工作原型,Thymeleaf会在运行期替换掉静态值。Velocity与FreeMarker则是连续的文本处理器,这样他们就可以处理任何基于文本的模板了。另一方面,Thymeleaf是个XML处理器,它使用了DOM。只能处理基于XML格式的这种限制使得Thymeleaf能够充分利用XML和Web环境所独有的特性。注意,由于Thymeleaf使用了XML DOM解析器,因此它并不适合于处理大规模的XML文件。 下面的代码示例分别使用Velocity、FreeMarker与Thymeleaf打印出一条消息: Velocity: $message FreeMarker: ${message} Thymeleaf:

    Hello World! 注意到Thymeleaf去掉了图形化标签,并支持硬编码的文本,在运行期可以将这些文本替换掉。 你可以使用表达式的形式编写Thymeleaf属性,一共有4种类型的属性,分别是变量表达式、选择表达式、文本具化表达式以及URL表达式。变量表达式是Object-Graph Navigation Language(OGNL)表达式,如果使用了SpringStandard,那么还可以使用Spring EL,表达式在上下文图中执行。选择表达式类似于变量表达式,只不过他们是在父对象上执行。你可以通过文本具化表达式从外部资源如.properties文件中检索内容。URL表达式会将上下文与Session信息添加到URL中。感兴趣的读者可以阅读“Getting started with the Standard dialects”这篇文章详细了解Thymeleaf的使用示例。 你可以从SourceForge上下载Thymeleaf并阅读Using Thymeleaf指南来快速上手。如果使用Maven,那么你可以使用org.thymeleaf groupid和thymeleaf artifactId。Thymeleaf最小的依赖是Java SE 5、ognl 3.0、javassist 3.14.0-GA及slf4j 1.6.1。感兴趣的读者可以通过Thymeleaf 官方文档和论坛了解更多信息。

    Struts2_Convention_Plugin中文文档

    Struts2 Convention Plugin中文文档(一) Introduction 从struts2.1版本开始,Convention Plugin作为替换替换Codebehind Plugin来实现Struts2的零配置。 ?包命名习惯来指定Action位置 ?命名习惯制定结果(支持JSP,FreeMarker等)路径 ?类名到URL的约定转换 ?包名到命名空间(namespace)的约定转换 ?遵循SEO规范的链接地址(即:使用my-action 来替代MyAction) ?基于注解的Action名 ?基于注解的拦截机(Interceptor) ?基于注解的命名空间(Nameespace) ?基于注解的X Work包 ?默认action以及默认的结果(比如:/products 将会尝试寻找com.example.actions.Products 或com.example.actions.products.Index进行处理) 无需配置Convention即可使用Convention,Convention的某些约束习惯可以通过配置属性来控制,您也可以在类中覆写其中的方法来达到扩展目地。 安装 使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中,你也可以在你Maven 项目的POM文件中添加下面包依赖 1. 2. org.apache.struts 3. struts2-convention-plugin 4. 2.1.6 5. 转换基于Codebehind项目到Convention 跳转到此页面,查看需要修改的变化和小提示 如果你想在你系统中结合Convention插件使用REST。需要在你项目的struts.xml中添加如下配置 1. 2. 3. Hello world 到目前为止,你已经在你项目中添加了Convention插件支持,首先我们从一个非常简单的例子开始入手。本例中,我们将演示根据访问URL来访问固定的Action,默认情况下,Convention会默认所

    相关文档