Irene

统计

最新评论

2015年2月7日 #

转-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% -->

<#assign foo=ture /> //声明变量,插入布尔值进行显示 
${foo?string("yes","no")} <#-- yes -->

大小比较符号使用需要注意:(xml的原因),可以用于比较数字和日期 
使用lt、lte、gt和gte来替代<、<=、>和>= 也可以使用括号<#if (x>y)>

内置函数: 调用区别于属性的访问,使用?代替. 
常见的一些内置函数 
对于字符串 
html-对字符串进行HTML编码 
cap_first-使字符串第一个字母大写 
lower_case-将字符串转换成小写 
trim-去掉字符串前后的空白字符

示例:${“freeMarker”?cap_first

 

对于Sequences(序列) 
size-获得序列中元素的数目

对于数字 
int-取得数字的整数部分(如-1.9?int的结果是-1)

对于集合,可以使用数组的方式,使用下标索引进行访问

逻辑判断: 
if................

<#if condition>... 
<#elseif condition2>... 
<#elseif condition3>...... 
<#else>... 
Boolean类型的空值判断 
空值判断可以写成<#if book.name?? > //注意${}为变量的渲染显示,而<>为定义等操作符的定义

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

快速定义int区间的集合 
<#assign l=0..100/> //注意不需要[]

3:循环读取集合: 注意/的使用 
<#list student as stu> 
${stu}<br/> 
</#list> 
与jstl循环类似,也可以访问循环的状态 
item_index:当前变量的索引值 
item_has_next:是否存在下一个对象 其中item名称为as后的变量名,如stu

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

宏/模板 
初步了解: 使用更像一个闭包closure,可以定义后,在脚本中任意地方引用,并原地起作用 
<#macro greet> 
<font size="+2">Hello Joe!</font> 
</#macro> 
使用的方式为: 
<@greet></@greet> //同xml可以简写成<@greet/>

宏的参数定义,类似js,在宏名后 带参数进行传递定义 
<#macro greet person color> 
${person} 
</#macro>

调用带参数时,注意使用类似XML的属性格式进行传递,不需要关心顺序问题 
<@greet person="Fred" color="black"/>

参数默认值定义,如果没有,就必须要求传递完整的参数列表 
<#macro greet person color="black"> 
<font size="+2" color="${color}">Hello ${person}!</font> 
</#macro>

使用xml的嵌套内容进行传递宏调用,关键标签 <#nested> 
<#macro border> 
<table border=4 cellspacing=0 cellpadding=4><tr><td> 
<#nested> 
</tr></td></table> 
</#macro>

调用时: 
<@border>The bordered text</@border>

<#nested> 标签可以在宏中多次调用,也可以将多个宏组合进行嵌套

for循环的精简版: 
<#list 1..count as x> 
</#list>

宏的循环变量,配合嵌套标签进行参数传递, 
<#macro repeat count> 
<#list 1..count as x> 
<#nested x, x/2, x==count> //这里的三个参数,将会传递到嵌套内容中 
</#list> 
</#macro>

<@repeat count=4 ; c, halfc, last> 
${c}. ${halfc}<#if last> Last!</#if> //这里的内容由macro中的<#nested>进行参数的传递,传递的数量任意,当注意需要宏接受这些 
</@repeat> 
上述还需要注意;的使用

参数的数量是可变的,并不要求全部都有,但是效果不同

在模板中定义变量 
在模板中定义的变量有三种类型: 
plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换。 
局部变量:在宏定义体中有效,使用local指令创建和替换。 
循环变量:只能存在于指令的嵌套内容,由指令(如list)自动创建;宏的参数是局部变量,而不是循环变量

<#assign x = "plain"> //全局的plain变量 
内部循环变量将会隐藏同名的外部循环变量

外部导入的使用,可以用于模块化,并且提供公用性 
如:lib/my_lib.ftl文件 
<#macro copyright date> 
<p>Copyright (C) ${date} Julia Smith. All rights reserved. 
<br>Email: ${mail}</p> 
</#macro> 
<#assign mail = "jsmith@acme.com">

lib/my_inc.ftl文件 
<#import "/lib/my_test.ftl" as my> 
<#assign mail="fred@acme.com"> 
<@my.copyright date="1999-2002"/> 
${my.mail} 
${mail} 
输出结果将不会出现冲突

对于库中的变量修改,使用in关键字 
<#assign mail="jsmith@other.com" in my>

函数定义:区别于宏对象,带返回值 
<#function name param1 param2><#return val></#function>函数,有返回参数

stringA[M .. N] 取子字符串,类似substring(stringA, M, N)

<#include "/copyright_footer.html"> 导入其他页面元素 
<#include filename options> 
options包含两个属性 
encoding=”GBK” 编码格式 
parse=true 是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在ftl文件里布尔值都是直接赋值的如parse=true,而不是

parse=”true”

hash与list的定义 
<#assign c= {"a":"orz","b":"czs"}> 
${c.a}

List片段可以采用: products[10..19] or products[5..] 的格式进行定义,当只局限于数字 
<#assign c= [1,2,3,4,5,6,6,7]> 
<#list c[1..3] as v> 
${v} 
</#list>

对变量的缺省处理 
product.color!"red"

用compress directive或者transform来处理输出。 
<#compress>...</#compress>:消除空白行。 
<@compress single_line=true>...</@compress>将输出压缩为一行。都需要包裹所需文档

freemarker可用"["代替"<".在模板的文件开头加上[#ftl].

注释部分 
<#-- 注释部分 -->

数字输出的另外一种方式 (本文第一句话中提到~)
#{c.a;m0} 区别于${},这个例子是用于输出数字的格式化,保留小数的位数,详细如下

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

在定义字符串的时候,可以使用''或者"",对特殊字符,需要使用\进行转义

如果存在大量特殊字符,可以使用${r"..."}进行过滤 
${r"${foo}"} 
${r"C:\foo\bar"}

Map对象的key和value都是表达式,但是key必须是字符串 
可以混合使用.和[""]访问 
book.author["name"] //混合使用点语法和方括号语法

为了处理缺失变量,FreeMarker提供了两个运算符: 用于防止对象不存在而导致的异常 
!:指定缺失变量的默认值 
??:判断某个变量是否存在,返回boolean值

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

${firstName?html} 使用html对字符进行格式化处理,对于<等的过滤

escape , noescape指令,对body内的内容实用统一的表达式 
看如下的代码: 
<#escape x as x?html> 
First name:${firstName} 
Last name:${lastName} 
Maiden name:${maidenName} 
</#escape> 
上面的代码等同于: 
First name:${firstName?html} 
Last name:${lastName?html} 
Maiden name:${maidenName?html}

定义全局变量的方式 
<#assign name1=value1 name2=value2 / > // 可以同时定义多个变量,也可以使用循环来给变量赋值 
<#assign x> 
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n> 
${n} 
</#list> 
</#assign> 
${x}

setting指令,用于动态设置freeMarker的运行环境:

该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:<#setting name=value>,在这个格式中,name的取值范围包含如下几个: 
locale:该选项指定该模板所用的国家/语言选项 
number_format:指定格式化输出数字的格式 
boolean_format:指定两个布尔值的语法格式,默认值是true,false 
date_format,time_format,datetime_format:指定格式化输出日期的格式 
time_zone:设置格式化输出日期时所使用的时区

<#return> 用于退出宏的运行

?html 用于将字符串中可能包含的html字符,进行过滤.

调用Java方法,需要使用实现TemplateMethodModel接口,但是好像会覆盖掉属性的访问

posted @ 2015-02-07 17:26 Irene 阅读(344) | 评论 (0)编辑 收藏

转- FreeMarker内置函数 & 数字、字符串、日期格式化用法

在用FreeMarker过程中,感觉FreeMarker的字符串,日期,集合等处理能力还是很强大的,上网搜了一些资料,整理如下,以便能帮助大家更熟练的应用Freemarker完成项目开发。


一、Sequence的内置函数
1.     sequence?first 返回sequence的第一个值。
2.     sequence?last  返回sequence的最后一个值。
3.     sequence?reverse 将sequence的现有顺序反转,即倒序排序
4.     sequence?size    返回sequence的大小
5.     sequence?sort    将sequence中的对象转化为字符串后顺序排序
6.     sequence?sort_by(value) 按sequence中对象的属性value进行排序
 
注意:Sequence不能为null。以上方法在我的另一篇博客Freemarker中如何遍历List有详细的应用,感兴趣的朋友可以参考。


二、Hash的内置函数


1.    hash?keys 返回hash里的所有key,返回结果为sequence
2.    hash?values 返回hash里的所有value,返回结果为sequence
例如:
<#assign user={“name”:“hailang”, “sex”:“man”}>
            <#assign keys=user?keys>
            <#list keys as key>
                ${key}=${user[key]}
            </#list>
 
三、操作字符串函数


1. substring(start,end)从一个字符串中截取子串
start:截取子串开始的索引,start必须大于等于0,小于等于end
end: 截取子串的长度,end必须大于等于0,小于等于字符串长度,如果省略该参数,默认为字符串长度。
例子:
${‘str’?substring(0)}à结果为str
${‘str’?substring(1)}à结果为tr
${‘str’?substring(2)}à结果为r
${‘str’?substring(3)}à结果为
${‘str’?substring(0,0)}à结果为
${‘str’?substring(0,1)}à结果为s
${‘str’?substring(0,2)}à结果为st
${‘str’?substring(0,3)}à结果为str


2. cap_first 将字符串中的第一个单词的首字母变为大写。
${‘str’?cap_first}à结果为Str


3. uncap_first将字符串中的第一个单词的首字母变为小写。
${‘Str’?cap_first}à结果为str


4. capitalize将字符串中的所有单词的首字母变为大写
${‘str’? capitalize}à结果为STR


5. date,time,datetime将字符串转换为日期
例如:


<#assign date1=”2009-10-12”?date(“yyyy-MM-dd”)>
<#assign date2=”9:28:20”?datetime(“HH:mm:ss”)>
<#assign date3=” 2009-10-12 9:28:20”?datetime(“HH:mm:ss”)>
${date1}à结果为2009-10-12
${date2}à结果为9:28:20
${date3}à结果为2009-10-12 9:28:20
注意:如果指定的字符串格式不正确将引发错误。


6. ends_with 判断某个字符串是否由某个子串结尾,返回布尔值。
${“string”?ends_with(“ing”)?string} 返回结果为true
注意:布尔值必须转换为字符串才能输出


7. html 用于将字符串中的<、>、&和“替换为对应得&lt;&gt;&quot:&amp


8. index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。
Start参数用于指定从字符串的那个索引处开始搜索,start为数字值。
如果start大于字符串长度,则start取值等于字符串长度,如果start小于0, 则start取值为0。
${“string”?index_of(“in”) à结果为3
${“string”?index_of(“ab”) à结果为-1


9. length返回字符串的长度 ${“string”?length}à结果为6


10.lower_case将字符串转为小写
${“STRING”?lower_case}à结果为string


11.upper_case将字符串转为大写
${“string”?upper_case}à结果为STRING


12.contains 判断字符中是否包含某个子串。返回布尔值
 ${“string”?contains(“ing”)?string} à结果为true
   注意:布尔值必须转换为字符串才能输出


13.number将字符串转换为数字 
${“111.11”?number}à结果为111.11


14.replace用于将字符串中的一部分从左到右替换为另外的字符串。
${“strabg”?replace(“ab”,”in”)} à结果为string


15.split使用指定的分隔符将一个字符串拆分为一组字符串
<#list “This|is|split”?split(“|”) as s>
   ${s}
</#list>


结果为:
This 
is
split


16.trim 删除字符串首尾空格 ${“  String ”?trim} à结果为String


四、操作数字
1. c 用于将数字转换为字符串
${123?c} à结果为123


2. string用于将数字转换为字符串
Freemarker中预订义了三种数字格式:number,currency(货币)和percent(百分比)其中number为默认的数字格式转换
例如:  
<#assign tempNum=20>
${tempNum}     
${tempNum?string.number}或${tempNum?string(“number”)} à结果为20
${tempNum?string.currency}或${tempNum?string(“currency”)} à结果为¥20.00
${tempNum?string. percent}或${tempNum?string(“percent”)} à结果为2,000%


五、操作布尔值
string 用于将布尔值转换为字符串输出
true转为“true”,false转换为“false”
foo?string(“yes”,”no”)如果布尔值是true,那么返回“yes”,否则返回no




  通过上面对开发中常用的Freemarker内置函数及用法的介绍,相信您已经对这些函数的有了一定的了解,希望本文能对您的开发有所帮助。由于时间仓促,有不足之处请您批评指正。

posted @ 2015-02-07 15:11 Irene 阅读(105) | 评论 (0)编辑 收藏

2012年7月17日 #

sublime text 2 Shorcuts

These are the most common keyboard shortcuts used in Sublime Text 2 (WIN):

Ctrl + Shift + P – Display commands list

Ctrl+P – Go to any file. I just hit Ctrl+P and type parts of files I want to open – huge time saver.

Ctrl + Space – Auto completion(X1).

Alt + 1, 2, 3, 4, … – Switch between open files’ tabs. Not to waste your time grabbing a mouse, and clicking on a tab.

Ctrl + PgUp/PgDn – Cicles throught the open files

Ctrl + click somewhere in your code – multiplies your caret, so you can simultaneously enter, delete, overwrite your code. Hitting Esc will exit this function.

Alt + Shift + W – Wrap selection with a tag. Select text, hit shortcut, enter tag’s name, done.

Ctrl + Shift + T – Open last closed file

Alt + Shift + 1,2,3,4,5… – Splits the screen into multiple views for multiple files

Ctrl K ,  Ctrl B – Opens/Closes the file explorer (X2, X3)

Ctrl + G – Go to any line

Ctrl + H – Replace

Ctrl + F – Find

Shift + Ctrl + D – Duplicates the current line, or the selection, if something is selected.

Ctrl + D – If no thing is selected, (can be previous selected)  the current word closest to the caret is selected. Keep hitting this shortcut will select near by strings that are a match, and can be used for multiple editing. (X4)


posted @ 2012-07-17 10:19 Irene 阅读(117) | 评论 (0)编辑 收藏

2008年8月29日 #

写一个函数,能够递归遍历一个文件夹下的所有文件和子文件夹

 

$dir = $_SERVER['DOCUMENT_ROOT'].'/tree/';

function scandir_detail($path)

{

       $files=array();

       if(is_dir($path))

       {

              $temp=scandir($path);

              foreach($temp as $file)

              {

                     if($file != '.' && $file != '..')

                     {

                            if (is_dir($path.$file)) {

                                   $files[$file]=scandir_detail($path.$file."/");

                            }else

                            {

                                   $files[]=$file;

                            }

                     }

              }

       }

       return $files;

}

function showTree($files)

{

       echo "<ul>";

       foreach($files as $key=>$file)

       {

              if(is_array($file))

              {

                     echo "<li>".$key;

                     showTree($file);

              }else

              {

                     echo "<li>".$file;

              }

       }

       echo "</ul>";

}

showTree(scandir_detail($dir));



posted @ 2008-08-29 15:44 Irene 阅读(2635) | 评论 (0)编辑 收藏

2008年8月21日 #

php小常识

 
PHPpersonal home page “PHP: Hypertext Preprocessor,超文本预处理器的字母缩写)
是一种被广泛应用的开放源代码的多用途脚本语言,
它可嵌入到 HTML中,尤其适合 web 开发。 (与CPerl不同之处)
和客户端的 JavaScript 不同的是,PHP 代码是运行在服务端的 

PHP 能做任何事 :
PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies PHP 的功能远不局限于此。
服务端脚本
命令行脚本
编写桌面应用程序 
 
PHP 能够用在所有的主流操作系统上,
包括 LinuxUnix 的各种变种(包括 HP-UXSolaris OpenBSD
Microsoft Windows等。
今天,PHP已经支持了大多数的 web 服务器,包括 ApacheMicrosoft Internet Information ServerIIS)、Personal web ServerPWS)、Netscape 以及 iPlant serverOreilly Website Pro ServerCaudiumXitamiOmniHTTPd 等。
综上所述,使用 PHP,可以自由地选择操作系统和 web 服务器。同时,还可以在开发时选择使用面向过程和面向对象,或者两者混和的方式来开发。引入了完全的对象模型。
 
LAMP(Linux + Apache + MySQL + PHP/Perl/Python) 近几年来,已经成为Web 社区的事实标准
Linux
Apache
Mysql
PHP 
主要的配置是ApachePHP ;

还可以:(我是用这种的)
•Windows系统下,
-安装MYSQL,
安装apache(默认端口80,此时注意IIS应禁止;当然你也可以修改端口~~~)
解压缩PHP
Copy php5ts.dll à %winroot%\system32
Copy libmysql.dll à %winroot%\system32
Copy php.ini-recommended à %winroot%\php.ini
Edit %APACHE_HOME%\conf\httpd.conf:加上
LoadModule php5_module C:/Apache2/php/sapi/php5apache2.dll(路径须修改)
AddType application/x-httpd-php .php
新建一个测试页面test.php :放到apache下的htdocs目录下,该目录是apache认的根目录
test.php的页面内容:
<?php
phpinfo();
?>
配置mysql
Copy (php/ext/)php_mysql.dll à %winroot%\system32
修改windows/php.ini配置文件:
找到; extension=php_mysql.dll
去除前面的分号
然后重新启动apache

 
可选的Apache配置(一般修改1,3即可):(httpd文件中)
DocumentRoot  “D:/Program Files/Apache2/htdocs”       配置网站根目录
DirectoryIndex   DirectoryIndex index.html index.html.var     默认页面
Listen   :Listen 80  监听端口(可以修改如:8080)


        当然,你也可以走捷径,那就是安装傻瓜式的PHPSTUDY,之所以叫它傻瓜,就是说它的安装很简单,而且一次性安装即可,不用安装以上的多个软件,也不用做麻烦的配置工作!我还是很推荐用这种方法的!




posted @ 2008-08-21 23:04 Irene 阅读(126) | 评论 (0)编辑 收藏

2008年8月18日 #

把漂亮的QQ空间鼠标变成自己的

 

  首先进入qq空间,点击装扮空间”---〉选择小装饰” ---〉鼠标;

  看!!好多漂亮的鼠标^O^

  找一个自己喜欢的,在上面点击 右键---〉属性 把地址 复制到浏览器上,下面进行以下修改:

  把链接中的“pre” 修改为“orig”,把“gif”修改为“ani”,回车,下载到桌面。

  下面开始应用:打开控制面板---〉鼠标---〉指针---〉浏览 找到刚才下到的鼠标;

  可爱吧!呵呵......

 

 

posted @ 2008-08-18 00:38 Irene 阅读(110) | 评论 (0)编辑 收藏

苜蓿草

   
  
          幸运草,学名苜蓿草,是多年生的草本植物,一般只有三片叶子,所以又叫三叶草 苜蓿草成千上万的生长在我们的周围,但是或许你用十年的光阴,也未必能找到一片四个叶子的苜蓿草。据说在十万株苜蓿草中,可能只有唯一的一株是四叶草。因为珍稀难求,所以四叶草一直是国际公认的幸运的象征!

 

     三叶草的传说在英国、爱尔兰最为盛行,并成为爱尔兰的国花。时至今日,它已变成西方国家的民间传统。小朋友会以在草原上找寻四叶草为乐,而每年三月在纽约举行的圣比德日(Stpartick’s Day),人们都会穿上绿色衣物,带上吉祥物——四叶的三叶草饰物来游行。至于在日本不少商铺用四叶草做店名,又或以它作为漫画书的背景。甚至连台湾的名作家琼瑶曾出了《幸运草》的小说。由此可见关于幸运草的故事已广为流传,而且有很久的历史背景。

 

     幸运草原产于欧洲与美洲,以真正幸运草制作的精品,在欧美、东南亚流行以久。如今在韩国、日本,更是以幸运草饰品作为送给朋友的最完美无缺的祝福。四片叶子的幸运草因为产量稀少,所以弥足珍贵。 神奇的四叶草,一定会给你带来一生憧憬的幸运!

 

     四片叶子的幸运草,每片叶子都有不同的意义,当中包含了人生梦寐以求的四样东西:名誉、财富、爱情、健康。相传若是为爱人找到了幸运草,那就是找到了幸福。。。。。

 

     Four leaf clover 幸运草:

第一片叶子代表真爱(love)

第二片叶子代表健康(health)

第三片叶子代表名誉(glory)

第四片叶子代表财富(riches)

 

      也有另一种说法

第一片叶子代表乞求

第二片叶子代表希望

第三片叶子代表爱情

第四片叶子代表幸福

     还有这一种说法:

第一片叶子是信仰

第二片叶子是希望

第三片叶子是爱情

第四片叶子是幸运

     关于四叶草,还有一个很美的传说呢!以前有一对恋人,他们真的很相爱,一起住在一片很美的桃林里,但是因为一件特别小的事,他们闹别扭了,彼此不肯让步,终于有一天,爱神看不下去了,他飘到他们住的那片桃林,悄悄撒了一个谎:告诉他们各方会有难,只有在桃林的最深处找到那片四叶草才可以挽救他们,他们听后装作十分无所谓,可是心里还是为对方担忧着,那晚下雨了,是暴雨,可是他们仍偷偷为对方到桃林最深处寻找四叶草,当他们知道对方都很在乎自己,都好感动,决定让四叶草见证他们的爱情,爱神笑了…… 这是爱神开的一个玩笑,因为她并不想让幸福来得过于容易,只有彼此在乎,彼此珍惜的人才配拥有幸福 ……

   

      PS:启动四叶草的魔法:

One leaf for name,(一叶带来荣誉)

One leaf for wealth,(一叶带来财富)

One for a faithfully lover,(一叶带来爱情)

One for glorious health,(一叶带来健康)

All in this four-leafed clover.(四叶草啊!你拥有了这四种能力)

       喃喃念完上述四叶草的颂曲后,用右手的两只手指握着四叶草,慢慢的转动四叶草,许下你的愿望......
        非常不可思议,但是还是挺想找到四叶幸运草的;即使它没有那个神奇的力量,但是如果真的可以找到,那么付出的决心和努力一定是特别令人感动的,这才是意义所在......这份力量的魅力已经远远胜过故事本身!

posted @ 2008-08-18 00:18 Irene 阅读(153) | 评论 (0)编辑 收藏

仅列出标题