<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>夜半难眠 &#187; Web开发</title>
	<atom:link href="http://www.havenliu.com/category/web/feed" rel="self" type="application/rss+xml" />
	<link>http://www.havenliu.com</link>
	<description>blogger被和谐，重新搬家</description>
	<lastBuildDate>Tue, 07 Sep 2010 08:24:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Jquery html(val)使用注意</title>
		<link>http://www.havenliu.com/web/446.html</link>
		<comments>http://www.havenliu.com/web/446.html#comments</comments>
		<pubDate>Thu, 27 May 2010 05:46:16 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=446</guid>
		<description><![CDATA[Jquery的html(val)可以方面的向页面元素内部插入html代码，但要注意插入的html代码中不能包含script代码块，如果包含&#60;script&#62;&#8230;.&#60;/script&#62;这样的代码jquery会在插入的时候自动过滤掉，遇到这样的问题最好的方法还是用document.getElementById(&#8221;div&#8221;).innerHTML=html最保险。
相关文章2009年09月20日 -- JQuery基础入门-输入验证]]></description>
			<content:encoded><![CDATA[<p>Jquery的html(val)可以方面的向页面元素内部插入html代码，但要注意插入的html代码中不能包含script代码块，如果包含&lt;script&gt;&#8230;.&lt;/script&gt;这样的代码jquery会在插入的时候自动过滤掉，遇到这样的问题最好的方法还是用document.getElementById(&#8221;div&#8221;).innerHTML=html最保险。</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年09月20日 -- <a href="http://www.havenliu.com/web/238.html" title="JQuery基础入门-输入验证">JQuery基础入门-输入验证</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/web/446.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>找到一份比较全面的freemarker语法总结</title>
		<link>http://www.havenliu.com/goodarticle/420.html</link>
		<comments>http://www.havenliu.com/goodarticle/420.html#comments</comments>
		<pubDate>Tue, 11 May 2010 04:41:05 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[网络文摘]]></category>
		<category><![CDATA[FreeMarker]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=420</guid>
		<description><![CDATA[网上找到的。这份总结很全面。里面还有很详细的列子，一看就明白

语法
FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:
1. 文本:直接输出的部分
2. 注释:&#60;#&#8211; &#8230; &#8211;&#62;格式部分,不会输出
3. 插值:即${&#8230;}或#{&#8230;}格式的部分,将使用数据模型中的部分替代输出
4. FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出
1.    FTL指令规则
在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,这和HTML标签是完全类似的.
1.开始标签:&#60;#directivename parameter&#62;
2.结束标签:&#60;/#directivename&#62;
3.空标签:&#60;#directivename parameter/&#62;
实际上,使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号.
使用FTL标签时, 应该有正确的嵌套,而不是交叉使用,这和XML标签的用法完全一样.如果全用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错误消息.FreeMarker会忽略FTL标签中的空白字符.值得注意的是&#60; , /&#62; 和指令之间不允许有空白字符.
2.    插值规则
FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}
2.1 通用插值
对于通用插值,又可以分为以下4种情况:
1. 插值结果为字符串值:直接输出表达式结果
2. 插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
&#60;#settion number_format=&#8221;currency&#8221;/&#62;
&#60;#assign answer=42/&#62;
${answer}
${answer?string} &#60;#&#8211; the same as ${answer} &#8211;&#62;
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
输出结果是:
$42.00
$42.00
42
$42.00
4,200%
3. 插值结果为日期值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
${lastUpdated?string(&#8221;yyyy-MM-dd HH:mm:ss zzzz&#8221;)}
${lastUpdated?string(&#8221;EEE, MMM d, &#8221;yy&#8221;)}
${lastUpdated?string(&#8221;EEEE, MMMM dd, yyyy, hh:mm:ss a &#8216;(&#8217;zzz&#8217;)'&#8221;)}
输出结果是:
2008-04-08 08:08:08 Pacific Daylight Time
Tue, Apr 8, &#8216;03
Tuesday, April 08, 2003, 08:08:08 PM (PDT)
4. 插值结果为布尔值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
&#60;#assign foo=true/&#62;
${foo?string(&#8221;yes&#8221;, &#8220;no&#8221;)}
输出结果是:
yes
2.2 数字格式化插值
数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
如下面的例子:
&#60;#assign [...]]]></description>
			<content:encoded><![CDATA[<p>网上找到的。这份总结很全面。里面还有很详细的列子，一看就明白</p>
<h1></h1>
<h1>语法</h1>
<p>FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:<br />
1. 文本:直接输出的部分<br />
2. 注释:&lt;#&#8211; &#8230; &#8211;&gt;格式部分,不会输出<br />
3. 插值:即${&#8230;}或#{&#8230;}格式的部分,将使用数据模型中的部分替代输出<br />
4. FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出</p>
<h2>1.    <strong>FTL</strong><strong>指令规则</strong></h2>
<p>在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,这和HTML标签是完全类似的.<br />
1.开始标签:&lt;#directivename parameter&gt;<br />
2.结束标签:&lt;/#directivename&gt;<br />
3.空标签:&lt;#directivename parameter/&gt;</p>
<p>实际上,使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号.<br />
使用FTL标签时, 应该有正确的嵌套,而不是交叉使用,这和XML标签的用法完全一样.如果全用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错误消息.FreeMarker会忽略FTL标签中的空白字符.值得注意的是&lt; , /&gt; 和指令之间不允许有空白字符.</p>
<h2>2.    <strong>插值规则</strong></h2>
<p>FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}</p>
<h3><strong>2.1 </strong><strong>通用插值</strong></h3>
<p>对于通用插值,又可以分为以下4种情况:<br />
1. 插值结果为字符串值:直接输出表达式结果<br />
2. 插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:<br />
&lt;#settion number_format=&#8221;currency&#8221;/&gt;<br />
&lt;#assign answer=42/&gt;<br />
${answer}<br />
${answer?string} &lt;#&#8211; the same as ${answer} &#8211;&gt;<br />
${answer?string.number}<br />
${answer?string.currency}<br />
${answer?string.percent}<br />
${answer}<br />
输出结果是:<br />
$42.00<br />
$42.00<br />
42<br />
$42.00<br />
4,200%<br />
3. 插值结果为日期值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:<br />
${lastUpdated?string(&#8221;yyyy-MM-dd HH:mm:ss zzzz&#8221;)}<br />
${lastUpdated?string(&#8221;EEE, MMM d, &#8221;yy&#8221;)}<br />
${lastUpdated?string(&#8221;EEEE, MMMM dd, yyyy, hh:mm:ss a &#8216;(&#8217;zzz&#8217;)'&#8221;)}<br />
输出结果是:<br />
2008-04-08 08:08:08 Pacific Daylight Time<br />
Tue, Apr 8, &#8216;03<br />
Tuesday, April 08, 2003, 08:08:08 PM (PDT)<br />
4. 插值结果为布尔值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:<br />
&lt;#assign foo=true/&gt;<br />
${foo?string(&#8221;yes&#8221;, &#8220;no&#8221;)}<br />
输出结果是:<br />
yes</p>
<h3><strong>2.2 </strong><strong>数字格式化插值</strong></h3>
<p>数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:<br />
mX:小数部分最小X位<br />
MX:小数部分最大X位<br />
如下面的例子:<br />
&lt;#assign x=2.582/&gt;<br />
&lt;#assign y=4/&gt;<br />
#{x; M2} &lt;#&#8211; 输出2.58 &#8211;&gt;<br />
#{y; M2} &lt;#&#8211; 输出4 &#8211;&gt;<br />
#{x; m2} &lt;#&#8211; 输出2.6 &#8211;&gt;<br />
#{y; m2} &lt;#&#8211; 输出4.0 &#8211;&gt;<br />
#{x; m1M2} &lt;#&#8211; 输出2.58 &#8211;&gt;<br />
#{x; m1M2} &lt;#&#8211; 输出4.0 &#8211;&gt;<span id="more-420"></span></p>
<h2>3.    <strong>表达式</strong></h2>
<p>表达式是FreeMarker模板的核心功能,表达式放置在插值语法${}之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker 标签结合,用于控制输出.实际上FreeMarker的表达式功能非常强大,它不仅支持直接指定值,输出变量值,也支持字符串格式化输出和集合访问等功能.</p>
<h3><strong>3.1 </strong><strong>直接指定值</strong></h3>
<p>使用直接指定值语法让FreeMarker直接输出插值中的值,而不是输出变量值.直接指定值可以是字符串,数值,布尔值,集合和MAP对象.</p>
<p>1. 字符串<br />
直接指定字符串值使用单引号或双引号限定,如果字符串值中包含特殊字符需要转义,看下面的例子:<br />
${&#8221;我的文件保存在C:\\盘&#8221;}<br />
${&#8217;我名字是\&#8221;annlee\&#8221;&#8216;}<br />
输出结果是:<br />
我的文件保存在C:\盘<br />
我名字是&#8221;annlee&#8221;</p>
<p>FreeMarker支持如下转义字符:<br />
\&#8221;;双引号(u0022)<br />
\&#8217;;单引号(u0027)<br />
\\;反斜杠(u005C)<br />
\n;换行(u000A)<br />
\r;回车(u000D)<br />
\t;Tab(u0009)<br />
\b;退格键(u0008)<br />
\f;Form feed(u000C)<br />
\l;&lt;<br />
\g;&gt;<br />
\a;&amp;<br />
\{;{<br />
\xCode;直接通过4位的16进制数来指定Unicode码,输出该unicode码对应的字符.</p>
<p>如果某段文本中包含大量的特殊符号,FreeMarker提供了另一种特殊格式:可以在指定字符串内容的引号前增加r标记,在r标记后的文件将会直接输出.看如下代码:<br />
${r&#8221;${foo}&#8221;}<br />
${r&#8221;C:\foo\bar&#8221;}<br />
输出结果是:<br />
${foo}<br />
C:\foo\bar</p>
<p>2. 数值<br />
表达式中的数值直接输出,不需要引号.小数点使用&#8221;.&#8221;分隔,不能使用分组&#8221;,&#8221;符号.FreeMarker目前还不支持科学计数法,所以&#8221;1E3&#8243;是错误的.在FreeMarker表达式中使用数值需要注意以下几点:<br />
a)数值不能省略小数点前面的0,所以&#8221;.5&#8243;是错误的写法<br />
b)数值8 , +8 , 8.00都是相同的</p>
<p>3. 布尔值<br />
直接使用true和false,不使用引号.</p>
<p>4. 集合<br />
集合以方括号包括,各集合元素之间以英文逗号&#8221;,&#8221;分隔,看如下的例子:<br />
&lt;#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x&gt;<br />
${x}<br />
&lt;/#list&gt;<br />
输出结果是:<br />
星期一<br />
星期二<br />
星期三<br />
星期四<br />
星期五<br />
星期六<br />
星期天</p>
<p>除此之外,集合元素也可以是表达式,例子如下:<br />
[2 + 2, [1, 2, 3, 4], &#8220;whatnot&#8221;]</p>
<p>还可以使用数字范围定义数字集合,如2..5等同于[2, 3, 4, 5],但是更有效率.注意,使用数字范围来定义集合时无需使用方括号,数字范围也支持反递增的数字范围,如5..2</p>
<p>5,Map对象<br />
Map对象使用花括号包括,Map中的key-value对之间以英文冒号&#8221;:&#8221;分隔,多组key-value对之间以英文逗号&#8221;,&#8221;分隔.下面是一个例子:<br />
{&#8221;语文&#8221;:78, &#8220;数学&#8221;:80}<br />
Map对象的key和value都是表达式,但是key必须是字符串</p>
<h3><strong>3.2 </strong><strong>输出变量值</strong></h3>
<p>FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性.下面分别讨论这些情况</p>
<p>1. 顶层变量<br />
所谓顶层变量就是直接放在数据模型中的值,例如有如下数据模型:<br />
Map root = new HashMap();   //创建数据模型<br />
root.put(&#8221;name&#8221;,&#8221;annlee&#8221;);   //name是一个顶层变量</p>
<p>对于顶层变量,直接使用${variableName}来输出变量值,变量名只能是字母,数字,下划线,$,@和#的组合,且不能以数字开头号.为了输出上面的name的值,可以使用如下语法:<br />
${name}</p>
<p>2. 输出集合元素<br />
如果需要输出集合元素,则可以根据集合元素的索引来输出集合元素,集合元素的索引以方括号指定.假设有索引:<br />
["星期一","星期二","星期三","星期四","星期五","星期六","星期天"].该索引名为week,如果需要输出星期三,则可以使用如下语法:<br />
${week[2]}   //输出第三个集合元素</p>
<p>此外,FreeMarker还支持返回集合的子集合,如果需要返回集合的子集合,则可以使用如下语法:<br />
week[3..5]   //返回week集合的子集合,子集合中的元素是week集合中的第4-6个元素</p>
<p>3. 输出Map元素<br />
这里的Map对象可以是直接HashMap的实例,甚至包括JavaBean实例,对于JavaBean实例而言,我们一样可以把其当成属性为key,属性值为value的Map实例.为了输出Map元素的值,可以使用点语法或方括号语法.假如有下面的数据模型:<br />
Map root = new HashMap();<br />
Book book = new Book();<br />
Author author = new Author();<br />
author.setName(&#8221;annlee&#8221;);<br />
author.setAddress(&#8221;gz&#8221;);<br />
book.setName(&#8221;struts2&#8243;);<br />
book.setAuthor(author);<br />
root.put(&#8221;info&#8221;,&#8221;struts&#8221;);<br />
root.put(&#8221;book&#8221;, book);</p>
<p>为了访问数据模型中名为struts2的书的作者的名字,可以使用如下语法:<br />
book.author.name    //全部使用点语法<br />
book["author"].name<br />
book.author["name"]    //混合使用点语法和方括号语法<br />
book["author"]["name"]   //全部使用方括号语法</p>
<p>使用点语法时,变量名字有顶层变量一样的限制,但方括号语法没有该限制,因为名字可以是任意表达式的结果.</p>
<h3><strong>3.3</strong><strong>字符串操作</strong></h3>
<p>FreeMarker的表达式对字符串操作非常灵活,可以将字符串常量和变量连接起来,也可以返回字符串的子串等.</p>
<p>字符串连接有两种语法:<br />
1. 使用${..}或#{..}在字符串常量部分插入表达式的值,从而完成字符串连接.<br />
2. 直接使用连接运算符+来连接字符串</p>
<p>例如有如下数据模型:<br />
Map root = new HashMap(); root.put(&#8221;user&#8221;,&#8221;annlee&#8221;);<br />
下面将user变量和常量连接起来:<br />
${&#8221;hello, ${user}!&#8221;}   //使用第一种语法来连接<br />
${&#8221;hello, &#8221; + user + &#8220;!&#8221;} //使用+号来连接<br />
上面的输出字符串都是hello,annlee!,可以看出这两种语法的效果完全一样.</p>
<p>值得注意的是,${..}只能用于文本部分,不能用于表达式,下面的代码是错误的:<br />
&lt;#if ${isBig}&gt;Wow!&lt;/#if&gt;<br />
&lt;#if &#8220;${isBig}&#8221;&gt;Wow!&lt;/#if&gt;<br />
应该写成:&lt;#if isBig&gt;Wow!&lt;/#if&gt;</p>
<p>截取子串可以根据字符串的索引来进行,截取子串时如果只指定了一个索引值,则用于取得字符串中指定索引所对应的字符;如果指定两个索引值,则返回两个索引中间的字符串子串.假如有如下数据模型:<br />
Map root = new HashMap(); root.put(&#8221;book&#8221;,&#8221;struts2,freemarker&#8221;);<br />
可以通过如下语法来截取子串:<br />
${book[0]}${book[4]}   //结果是su<br />
${book[1..4]}     //结果是tru</p>
<h3><strong>3.4 </strong><strong>集合连接运算符</strong></h3>
<p>这里所说的集合运算符是将两个集合连接成一个新的集合,连接集合的运算符是+,看如下的例子:<br />
&lt;#list ["星期一","星期二","星期三"] + ["星期四","星期五","星期六","星期天"] as x&gt;<br />
${x}<br />
&lt;/#list&gt;<br />
输出结果是:星期一 星期二 星期三 星期四 星期五 星期六 星期天</p>
<h3><strong>3.5 Map</strong><strong>连接运算符</strong></h3>
<p>Map对象的连接运算符也是将两个Map对象连接成一个新的Map对象,Map对象的连接运算符是+,如果两个Map对象具有相同的key,则右边的值替代左边的值.看如下的例子:<br />
&lt;#assign scores = {&#8221;语文&#8221;:86,&#8221;数学&#8221;:78} + {&#8221;数学&#8221;:87,&#8221;Java&#8221;:93}&gt;<br />
语文成绩是${scores.语文}<br />
数学成绩是${scores.数学}<br />
Java成绩是${scores.Java}<br />
输出结果是:<br />
语文成绩是86<br />
数学成绩是87<br />
Java成绩是93</p>
<h3><strong>3.6 </strong><strong>算术运算符</strong></h3>
<p>FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, &#8211; , * , / , % 看如下的代码:<br />
&lt;#assign x=5&gt;<br />
${ x * x &#8211; 100 }<br />
${ x /2 }<br />
${ 12 %10 }<br />
输出结果是:<br />
-75   2.5   2</p>
<p>在表达式中使用算术运算符时要注意以下几点:<br />
1,运算符两边的运算数字必须是数字<br />
2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + &#8220;5&#8243;},结果是:35</p>
<p>使用内建的int函数可对数值取整,如:<br />
&lt;#assign x=5&gt;<br />
${ (x/2)?int }<br />
${ 1.1?int }<br />
${ 1.999?int }<br />
${ -1.1?int }<br />
${ -1.999?int }<br />
结果是:2 1 1 -1 -1</p>
<h3><strong>3.7 </strong><strong>比较运算符</strong></h3>
<p>表达式中支持的比较运算符有如下几个:<br />
1. =或者==:判断两个值是否相等.<br />
2. !=:判断两个值是否不等.<br />
3. &gt;或者gt:判断左边值是否大于右边值<br />
4. &gt;=或者gte:判断左边值是否大于等于右边值<br />
5. &lt;或者lt:判断左边值是否小于右边值<br />
6. &lt;=或者lte:判断左边值是否小于等于右边值</p>
<p>注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比 较,&#8221;x&#8221;,&#8221;x &#8220;,&#8221;X&#8221;是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替&gt;会有更好的效果,因为 FreeMarker会把&gt;解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:&lt;#if (x&gt;y)&gt;</p>
<h3><strong>3.8 </strong><strong>逻辑运算符</strong></h3>
<p>逻辑运算符有如下几个:<br />
逻辑与:&amp;&amp;<br />
逻辑或:||<br />
逻辑非:!<br />
逻辑运算符只能作用于布尔值,否则将产生错误</p>
<h3><strong>3.9 </strong><strong>内建函数</strong></h3>
<p>FreeMarker还提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可以通过内建函数来轮换输出变量.下面是常用的内建的字符串函数:<br />
html:对字符串进行HTML编码<br />
cap_first:使字符串第一个字母大写<br />
lower_case:将字符串转换成小写<br />
upper_case:将字符串转换成大写<br />
trim:去掉字符串前后的空白字符</p>
<p>下面是集合的常用内建函数<br />
size:获取序列中元素的个数</p>
<p>下面是数字值的常用内建函数<br />
int:取得数字的整数部分,结果带符号</p>
<p>例如:<br />
&lt;#assign test=&#8221;Tom &amp; Jerry&#8221;&gt;<br />
${test?html}<br />
${test?upper_case?html}<br />
结果是:Tom &amp;amp; Jerry   TOM &amp;amp; JERRY</p>
<h3><strong>3.10 </strong><strong>空值处理运算符</strong></h3>
<p>FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null值,null值和不存在的变 量完全相同.</p>
<p>为了处理缺失变量,FreeMarker提供了两个运算符:<br />
!: 指定缺失变量的默认值<br />
??: 判断某个变量是否存在</p>
<p>其中,!运算符的用法有如下两种:<br />
variable!或variable!defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象.</p>
<p>使用!指定默认值时,并不要求默认值的类型和变量类型相同.使用??运算符非常简单,它总是返回一个布尔值,用法为:variable??,如果该变量存在,返回true,否则返回false</p>
<h3><strong>3.11 </strong><strong>运算符的优先级</strong></h3>
<p>FreeMarker中的运算符优先级如下(由高到低排列):<br />
1. 一元运算符:!<br />
2. 内建函数:?<br />
3. 乘除法:*, / , %<br />
4. 加减法:- , +<br />
5. 比较:&gt; , &lt; , &gt;= , &lt;= (lt , lte , gt , gte)<br />
6. 相等:== , = , !=<br />
7. 逻辑与:&amp;&amp;<br />
8. 逻辑或:||<br />
9. 数字范围:..</p>
<p>实际上,我们在开发过程中应该使用括号来严格区分,这样的可读性好,出错少</p>
<h2>4.    <strong>FreeMarker</strong><strong>的常用指令</strong></h2>
<p>FreeMarker的FTL指令也是模板的重要组成部分,这些指令可实现对数据模型所包含数据的抚今迭代,分支控制.除此之外,还有一些重要的功能,也是通过FTL指令来实现的.</p>
<h3><strong>4.1 if</strong><strong>指令</strong></h3>
<p>这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下:<br />
&lt;#if condition&gt;&#8230;<br />
&lt;#elseif condition&gt;&#8230;<br />
&lt;#elseif condition&gt;&#8230;<br />
&lt;#else&gt; &#8230;<br />
&lt;/#if&gt;</p>
<p>例子如下:<br />
&lt;#assign age=23&gt;<br />
&lt;#if (age&gt;60)&gt;老年人<br />
&lt;#elseif (age&gt;40)&gt;中年人<br />
&lt;#elseif (age&gt;20)&gt;青年人<br />
&lt;#else&gt; 少年人<br />
&lt;/#if&gt;<br />
输出结果是:青年人<br />
上面的代码中的逻辑表达式用括号括起来主要是因为里面有&gt;符号,由于FreeMarker会将&gt;符号当成标签的结束字符,可能导致程序出错,为了避免这种情况,我们应该在凡是出现这些符号的地方都使用括号.</p>
<pre>&lt;#if animals.python.price &lt; animals.elephant.price&gt;</pre>
<pre>  Pythons are cheaper than elephants today.</pre>
<pre>&lt;#else&gt;</pre>
<pre>  Pythons are not cheaper than elephants today.</pre>
<pre>&lt;/#if&gt;</pre>
<h3><strong>4.2 switch , case , default , break</strong><strong>指令</strong></h3>
<p>这些指令显然是分支指令,作用类似于Java的switch语句,switch指令的语法结构如下:<br />
&lt;#switch value&gt;<br />
&lt;#case refValue&gt;&#8230;&lt;#break&gt;<br />
&lt;#case refValue&gt;&#8230;&lt;#break&gt;<br />
&lt;#default&gt;&#8230;<br />
&lt;/#switch&gt;</p>
<h3><strong>4.3 list, break</strong><strong>指令</strong></h3>
<p>list指令是一个迭代输出指令,用于迭代输出数据模型中的集合,list指令的语法格式如下:<br />
&lt;#list sequence as item&gt;<br />
&#8230;<br />
&lt;/#list&gt;<br />
上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量:<br />
item_index:当前变量的索引值<br />
item_has_next:是否存在下一个对象<br />
也可以使用&lt;#break&gt;指令跳出迭代</p>
<p>例子如下:<br />
&lt;#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x&gt;<br />
${x_index + 1}.${x}&lt;#if x_has_next&gt;,&lt;/if&gt;<br />
&lt;#if x=&#8221;星期四&#8221;&gt;&lt;#break&gt;&lt;/#if&gt;<br />
&lt;/#list&gt;</p>
<pre>&lt;p&gt;We have these animals:</pre>
<pre>&lt;table border=1&gt;</pre>
<pre>  &lt;tr&gt;&lt;th&gt;Name&lt;th&gt;Price</pre>
<pre>  &lt;#list animals as being&gt;</pre>
<pre>  &lt;tr&gt;&lt;td&gt;${being.name}&lt;td&gt;${being.price} Euros</pre>
<pre>  &lt;/#list&gt;</pre>
<pre>&lt;/table&gt;</pre>
<p>输出为：</p>
<pre>&lt;p&gt;We have these animals:</pre>
<pre>&lt;table border=1&gt;</pre>
<pre>  &lt;tr&gt;&lt;th&gt;Name&lt;th&gt;Price</pre>
<pre>  &lt;tr&gt;&lt;td&gt;mouse&lt;td&gt;50 Euros</pre>
<pre>  &lt;tr&gt;&lt;td&gt;elephant&lt;td&gt;5000 Euros</pre>
<pre>  &lt;tr&gt;&lt;td&gt;python&lt;td&gt;4999 Euros</pre>
<pre>&lt;/table&gt;</pre>
<h3><strong>4.4 include</strong><strong>指令</strong></h3>
<p>include指令的作用类似于JSP的包含指令,用于包含指定页.include指令的语法格式如下:<br />
&lt;#include filename [options]&gt;<br />
在上面的语法格式中,两个参数的解释如下:<br />
filename:该参数指定被包含的模板文件<br />
options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true.</p>
<pre>&lt;html&gt;</pre>
<pre>&lt;head&gt;</pre>
<pre>  &lt;title&gt;Test page&lt;/title&gt;</pre>
<pre>&lt;/head&gt;</pre>
<pre>&lt;body&gt;</pre>
<pre>  &lt;h1&gt;Test page&lt;/h1&gt;</pre>
<pre>  &lt;p&gt;Blah blah...</pre>
<pre>&lt;#include "/copyright_footer.html"&gt;</pre>
<pre>&lt;/body&gt;</pre>
<pre>&lt;/html&gt;</pre>
<h3><strong>4.5 import</strong><strong>指令</strong></h3>
<p>该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下:<br />
&lt;#import &#8220;/lib/common.ftl&#8221; as com&gt;<br />
上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中.</p>
<p>创建库</p>
<p>Ø         下面是一个创建库的例子（假设保存在lib/my_test.ftl中）：</p>
<pre>&lt;#macro copyright date&gt;</pre>
<pre>  &lt;p&gt;Copyright (C) ${date} Julia Smith. All rights reserved.</pre>
<pre>  &lt;br&gt;Email: ${mail}&lt;/p&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<pre>&lt;#assign mail = "jsmith@acme.com"&gt;</pre>
<p>Ø         使用import指令导入库到模板中，Freemarker会为导入的库创建新的名字空间，并可以通过import指令中指定的散列变量访问库中的变量：</p>
<pre>&lt;#import "/lib/my_test.ftl" as my&gt;</pre>
<pre>&lt;#assign mail="fred@acme.com"&gt;</pre>
<pre>&lt;@my.copyright date="1999-2002"/&gt;</pre>
<pre>${my.mail}</pre>
<pre>${mail}</pre>
<p>输出结果：</p>
<pre>  &lt;p&gt;Copyright (C) 1999-2002 Julia Smith. All rights reserved.</pre>
<pre>  &lt;br&gt;Email: jsmith@acme.com&lt;/p&gt;</pre>
<pre>jsmith@acme.com</pre>
<pre>fred@acme.com</pre>
<p>可以看到例子中使用的两个同名变量并没有冲突，因为它们位于不同的名字空间</p>
<p>l         可以使用assign指令在导入的名字空间中创建或替代变量，下面是一个例子：</p>
<pre>&lt;#import "/lib/my_test.ftl" as my&gt;</pre>
<pre>${my.mail}</pre>
<pre>&lt;#assign mail="jsmith@other.com" in my&gt;</pre>
<pre>${my.mail}</pre>
<p>l         输出结果：</p>
<pre>jsmith@acme.com</pre>
<pre>jsmith@other.com</pre>
<p>l         数据模型中的变量任何地方都可见，也包括不同的名字空间，下面是修改的库：</p>
<pre>&lt;#macro copyright date&gt;</pre>
<pre>  &lt;p&gt;Copyright (C) ${date} ${user}. All rights reserved.&lt;/p&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<pre>&lt;#assign mail = "${user}@acme.com"&gt;</pre>
<p>l         假设数据模型中的user变量的值是Fred，则下面的代码：</p>
<pre>&lt;#import "/lib/my_test.ftl" as my&gt;</pre>
<pre>&lt;@my.copyright date="1999-2002"/&gt;</pre>
<pre>${my.mail}</pre>
<p>l         输出结果：</p>
<pre>  &lt;p&gt;Copyright (C) 1999-2002 Fred. All rights reserved.&lt;/p&gt;</pre>
<p>Fred@acme.com</p>
<h3><strong>4.6 noparse</strong><strong>指令</strong></h3>
<p>noparse指令指定FreeMarker不处理该指定里包含的内容,该指令的语法格式如下:<br />
&lt;#noparse&gt;&#8230;&lt;/#noparse&gt;</p>
<p>看如下的例子:<br />
&lt;#noparse&gt;<br />
&lt;#list books as book&gt;<br />
&lt;tr&gt;&lt;td&gt;${book.name}&lt;td&gt;作者:${book.author}<br />
&lt;/#list&gt;<br />
&lt;/#noparse&gt;<br />
输出如下:<br />
&lt;#list books as book&gt;<br />
&lt;tr&gt;&lt;td&gt;${book.name}&lt;td&gt;作者:${book.author}<br />
&lt;/#list&gt;</p>
<h3><strong>4.7 escape , noescape</strong><strong>指令</strong></h3>
<p>escape指令导致body区的插值都会被自动加上escape表达式,但不会影响字符串内的插值,只会影响到body内出现的插值,使用escape指令的语法格式如下:<br />
&lt;#escape identifier as expression&gt;&#8230;<br />
&lt;#noescape&gt;&#8230;&lt;/#noescape&gt;<br />
&lt;/#escape&gt;</p>
<p>看如下的代码:<br />
&lt;#escape x as x?html&gt;<br />
First name:${firstName}<br />
Last name:${lastName}<br />
Maiden name:${maidenName}<br />
&lt;/#escape&gt;<br />
上面的代码等同于:<br />
First name:${firstName?html}<br />
Last name:${lastName?html}<br />
Maiden name:${maidenName?html}</p>
<p>escape指令在解析模板时起作用而不是在运行时起作用,除此之外,escape指令也嵌套使用,子escape继承父escape的规则,如下例子:<br />
&lt;#escape x as x?html&gt;<br />
Customer Name:${customerName}<br />
Items to ship;<br />
&lt;#escape x as itemCodeToNameMap[x]&gt;<br />
${itemCode1}<br />
${itemCode2}<br />
${itemCode3}<br />
${itemCode4}<br />
&lt;/#escape&gt;<br />
&lt;/#escape&gt;<br />
上面的代码类似于:<br />
Customer Name:${customerName?html}<br />
Items to ship;<br />
${itemCodeToNameMap[itemCode1]?html}<br />
${itemCodeToNameMap[itemCode2]?html}<br />
${itemCodeToNameMap[itemCode3]?html}<br />
${itemCodeToNameMap[itemCode4]?html}</p>
<p>对于放在escape指令中所有的插值而言,这此插值将被自动加上escape表达式,如果需要指定escape指令中某些插值无需添加escape表达式,则应该使用noescape指令,放在noescape指令中的插值将不会添加escape表达式.</p>
<h3><strong>4.8 assign</strong><strong>指令</strong></h3>
<p>assign指令在前面已经使用了多次,它用于为该模板页面创建或替换一个顶层变量,assign指令的用法有多种,包含创建或替换一个顶层变量, 或者创建或替换多个变量等,它的最简单的语法如下:&lt;#assign [in namespacehash]&gt;,这个用法用于指定一个名为name的变量,该变量的值为value,此外,FreeMarker允许在使用 assign指令里增加in子句,in子句用于将创建的name变量放入namespacehash命名空间中.</p>
<p>assign指令还有如下用法:&lt;#assign name1=value1 name2=value2 &#8230; nameN=valueN [in namespacehash]&gt;,这个语法可以同时创建或替换多个顶层变量,此外,还有一种复杂的用法,如果需要创建或替换的变量值是一个复杂的表 达式,则可以使用如下语法格式:&lt;#assign name [in namespacehash]&gt;capture this&lt;/#assign&gt;,在这个语法中,是指将assign指令的内容赋值给name变量.如下例子:<br />
&lt;#assign x&gt;<br />
&lt;#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n&gt;<br />
${n}<br />
&lt;/#list&gt;<br />
&lt;/#assign&gt;<br />
${x}<br />
上面的代码将产生如下输出:星期一 星期二 星期三 星期四 星期五 星期六 星期天</p>
<p>虽然assign指定了这种复杂变量值的用法,但是我们也不要滥用这种用法,如下例子:&lt;#assign x&gt;Hello ${user}!&lt;/#assign&gt;,以上代码改为如下写法更合适:&lt;#assign x=&#8221;Hello ${user}!&#8221;&gt;</p>
<h3><strong>4.9 setting</strong><strong>指令</strong></h3>
<p>该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:&lt;#setting name=value&gt;,在这个格式中,name的取值范围包含如下几个:<br />
locale:该选项指定该模板所用的国家/语言选项<br />
number_format:指定格式化输出数字的格式<br />
boolean_format:指定两个布尔值的语法格式,默认值是true,false<br />
date_format,time_format,datetime_format:指定格式化输出日期的格式<br />
time_zone:设置格式化输出日期时所使用的时区</p>
<h3><strong>4.10 macro , nested , return</strong><strong>指令</strong></h3>
<p>macro可以用于实现自定义指令,通过使用自定义指令,可以将一段模板片段定义成一个用户指令,使用macro指令的语法格式如下:<br />
&lt;#macro name param1 param2 &#8230; paramN&gt;<br />
&#8230;<br />
&lt;#nested loopvar1, loopvar2, &#8230;, loopvarN&gt;<br />
&#8230;<br />
&lt;#return&gt;<br />
&#8230;<br />
&lt;/#macro&gt;<br />
在上面的格式片段中,包含了如下几个部分:<br />
name:name属性指定的是该自定义指令的名字,使用自定义指令时可以传入多个参数<br />
paramX:该属性就是指定使用自定义指令时报参数,使用该自定义指令时,必须为这些参数传入值<br />
nested指令:nested标签输出使用自定义指令时的中间部分<br />
nested指令中的循环变量:这此循环变量将由macro定义部分指定,传给使用标签的模板<br />
return指令:该指令可用于随时结束该自定义指令.</p>
<p>看如下的例子:<br />
&lt;#macro book&gt;   //定义一个自定义指令<br />
j2ee<br />
&lt;/#macro&gt;<br />
&lt;@book /&gt;    //使用刚才定义的指令<br />
上面的代码输出结果为:j2ee</p>
<p>在上面的代码中,可能很难看出自定义标签的用处,因为我们定义的book指令所包含的内容非常简单,实际上,自定义标签可包含非常多的内容,从而可以实现更好的代码复用.此外,还可以在定义自定义指令时,为自定义指令指定参数,看如下代码:<br />
&lt;#macro book booklist&gt;     //定义一个自定义指令booklist是参数<br />
&lt;#list booklist as book&gt;<br />
${book}<br />
&lt;/#list&gt;<br />
&lt;/#macro&gt;<br />
&lt;@book booklist=["spring","j2ee"] /&gt;   //使用刚刚定义的指令<br />
上面的代码为book指令传入了一个参数值,上面的代码的输出结果为:spring j2ee</p>
<p>不仅如此,还可以在自定义指令时使用nested指令来输出自定义指令的中间部分,看如下例子:<br />
&lt;#macro page title&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;FreeMarker示例页面 &#8211; ${title?html}&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;${title?html}&lt;/h1&gt;<br />
&lt;#nested&gt;      //用于引入用户自定义指令的标签体<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&lt;/#macro&gt;<br />
上面的代码将一个HTML页面模板定义成一个page指令,则可以在其他页面中如此page指令:<br />
&lt;#import &#8220;/common.ftl&#8221; as com&gt;     //假设上面的模板页面名为common.ftl,导入页面<br />
&lt;@com.page title=&#8221;book list&#8221;&gt;<br />
&lt;u1&gt;<br />
&lt;li&gt;spring&lt;/li&gt;<br />
&lt;li&gt;j2ee&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/@com.page&gt;</p>
<p>从上面的例子可以看出,使用macro和nested指令可以非常容易地实现页面装饰效果,此外,还可以在使用nested指令时,指定一个或多个循环变量,看如下代码:<br />
&lt;#macro book&gt;<br />
&lt;#nested 1&gt;      //使用book指令时指定了一个循环变量值<br />
&lt;#nested 2&gt;<br />
&lt;/#macro&gt;<br />
&lt;@book ;x&gt; ${x} .图书&lt;/@book&gt;<br />
当使用nested指令传入变量值时,在使用该自定义指令时,就需要使用一个占位符(如book指令后的;x).上面的代码输出文本如下:<br />
1 .图书    2 .图书</p>
<p>在nested指令中使用循环变量时,可以使用多个循环变量,看如下代码:<br />
&lt;#macro repeat count&gt;<br />
&lt;#list 1..count as x&gt;     //使用nested指令时指定了三个循环变量<br />
&lt;#nested x, x/2, x==count&gt;<br />
&lt;/#list&gt;<br />
&lt;/#macro&gt;<br />
&lt;@repeat count=4 ; c halfc last&gt;<br />
${c}. ${halfc}&lt;#if last&gt; Last! &lt;/#if&gt;<br />
&lt;/@repeat&gt;<br />
上面的输出结果为:<br />
1. 0.5   2. 1   3. 1.5   4. 2 Last;</p>
<p>return指令用于结束macro指令,一旦在macro指令中执行了return指令,则FreeMarker不会继续处理macro指令里的内容,看如下代码:<br />
&lt;#macro book&gt;<br />
spring<br />
&lt;#return&gt;<br />
j2ee<br />
&lt;/#macro&gt;<br />
&lt;@book /&gt;<br />
上面的代码输出:spring,而j2ee位于return指令之后,不会输出.</p>
<p>用户定义指令</p>
<p>l         宏和变换器变量是两种不同类型的用户定义指令，它们之间的区别是宏是在模板中使用macro指令定义，而变换器是在模板外由程序定义，这里只介绍宏</p>
<p>l         基本用法</p>
<p>Ø         宏是和某个变量关联的模板片断，以便在模板中通过用户定义指令使用该变量，下面是一个例子：</p>
<pre>&lt;#macro greet&gt;</pre>
<pre>  &lt;font size="+2"&gt;Hello Joe!&lt;/font&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<p>Ø         作为用户定义指令使用宏变量时，使用@替代FTL标记中的#</p>
<pre>&lt;@greet&gt;&lt;/@greet&gt;</pre>
<p>Ø         如果没有体内容，也可以使用：</p>
<pre>&lt;@greet/&gt;</pre>
<p>l         参数</p>
<p>Ø         在macro指令中可以在宏变量之后定义参数，如：</p>
<pre>&lt;#macro greet person&gt;</pre>
<pre>  &lt;font size="+2"&gt;Hello ${person}!&lt;/font&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<p>Ø         可以这样使用这个宏变量：</p>
<pre>&lt;@greet person="Fred"/&gt; and &lt;@greet person="Batman"/&gt;</pre>
<p>输出结果是：</p>
<pre>  &lt;font size="+2"&gt;Hello Fred!&lt;/font&gt;</pre>
<pre> and   &lt;font size="+2"&gt;Hello Batman!&lt;/font&gt;</pre>
<pre></pre>
<p>Ø         宏的参数是FTL表达式，所以下面的代码具有不同的意思：</p>
<pre>&lt;@greet person=Fred/&gt;</pre>
<p>Ø         这意味着将Fred变量的值传给person参数，该值不仅是字符串，还可以是其它类型，甚至是复杂的表达式</p>
<p>Ø         宏可以有多参数，下面是一个例子：</p>
<pre>&lt;#macro greet person color&gt;</pre>
<pre>  &lt;font size="+2" color="${color}"&gt;Hello ${person}!&lt;/font&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<p>Ø         可以这样使用该宏变量：</p>
<pre>&lt;@greet person="Fred" color="black"/&gt;</pre>
<p>Ø         其中参数的次序是无关的，因此下面是等价的：</p>
<pre>&lt;@greet color="black" person="Fred"/&gt;</pre>
<p>Ø         只能使用在macro指令中定义的参数，并且对所有参数赋值，所以下面的代码是错误的：</p>
<pre>&lt;@greet person="Fred" color="black" background="green"/&gt;</pre>
<pre>&lt;@greet person="Fred"/&gt;</pre>
<p>Ø         可以在定义参数时指定缺省值，如：</p>
<pre>&lt;#macro greet person color="black"&gt;</pre>
<pre>  &lt;font size="+2" color="${color}"&gt;Hello ${person}!&lt;/font&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<p>Ø         这样&lt;@greet person=&#8221;Fred&#8221;/&gt;就正确了</p>
<p>Ø         宏的参数是局部变量，只能在宏定义中有效</p>
<p>l         嵌套内容</p>
<p>Ø         用户定义指令可以有嵌套内容，使用&lt;#nested&gt;指令执行指令开始和结束标记之间的模板片断</p>
<p>Ø         例子：</p>
<pre>&lt;#macro border&gt;</pre>
<pre>  &lt;table border=4 cellspacing=0 cellpadding=4&gt;&lt;tr&gt;&lt;td&gt;</pre>
<pre>    &lt;#nested&gt;</pre>
<pre>  &lt;/tr&gt;&lt;/td&gt;&lt;/table&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<p>这样使用该宏变量：</p>
<pre>&lt;@border&gt;The bordered text&lt;/@border&gt;</pre>
<p>输出结果：</p>
<pre>  &lt;table border=4 cellspacing=0 cellpadding=4&gt;&lt;tr&gt;&lt;td&gt;</pre>
<pre>    The bordered text</pre>
<pre>  &lt;/tr&gt;&lt;/td&gt;&lt;/table&gt;</pre>
<pre></pre>
<p>Ø         &lt;#nested&gt;指令可以被多次调用，例如：</p>
<pre>&lt;#macro do_thrice&gt;</pre>
<pre>  &lt;#nested&gt;</pre>
<pre>  &lt;#nested&gt;</pre>
<pre>  &lt;#nested&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<pre>&lt;@do_thrice&gt;</pre>
<pre>  Anything.</pre>
<pre>&lt;/@do_thrice&gt;</pre>
<p>输出结果：</p>
<pre>  Anything.</pre>
<pre>  Anything.</pre>
<pre>  Anything.</pre>
<p>Ø         嵌套内容可以是有效的FTL，下面是一个有些复杂的例子：</p>
<pre>&lt;@border&gt;</pre>
<pre>  &lt;ul&gt;</pre>
<pre>  &lt;@do_thrice&gt;</pre>
<pre>    &lt;li&gt;&lt;@greet person="Joe"/&gt;</pre>
<pre>  &lt;/@do_thrice&gt;</pre>
<pre>  &lt;/ul&gt;</pre>
<pre>&lt;/@border&gt;</pre>
<p>输出结果：</p>
<pre>  &lt;table border=4 cellspacing=0 cellpadding=4&gt;&lt;tr&gt;&lt;td&gt;</pre>
<pre>      &lt;ul&gt;</pre>
<pre>    &lt;li&gt;&lt;font size="+2"&gt;Hello Joe!&lt;/font&gt;</pre>
<pre></pre>
<pre>    &lt;li&gt;&lt;font size="+2"&gt;Hello Joe!&lt;/font&gt;</pre>
<pre></pre>
<pre>    &lt;li&gt;&lt;font size="+2"&gt;Hello Joe!&lt;/font&gt;</pre>
<pre></pre>
<pre>  &lt;/ul&gt;</pre>
<pre></pre>
<pre>  &lt;/tr&gt;&lt;/td&gt;&lt;/table&gt;</pre>
<p>Ø         宏定义中的局部变量对嵌套内容是不可见的，例如：</p>
<pre>&lt;#macro repeat count&gt;</pre>
<pre>  &lt;#local y = "test"&gt;</pre>
<pre>  &lt;#list 1..count as x&gt;</pre>
<pre>    ${y} ${count}/${x}: &lt;#nested&gt;</pre>
<pre>  &lt;/#list&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<pre>&lt;@repeat count=3&gt;${y?default("?")} ${x?default("?")} ${count?default("?")}&lt;/@repeat&gt;</pre>
<p>输出结果：</p>
<pre>    test 3/1: ? ? ?</pre>
<pre>    test 3/2: ? ? ?</pre>
<pre>    test 3/3: ? ? ?</pre>
<p>Ø</p>
<p>l         在宏定义中使用循环变量</p>
<p>Ø         用户定义指令可以有循环变量，通常用于重复嵌套内容，基本用法是：作为nested指令的参数传递循环变量的实际值，而在调用用户定义指令时，在&lt;@…&gt;开始标记的参数后面指定循环变量的名字</p>
<p>Ø         例子：</p>
<pre>&lt;#macro repeat count&gt;</pre>
<pre>  &lt;#list 1..count as x&gt;</pre>
<pre>    &lt;#nested x, x/2, x==count&gt;</pre>
<pre>  &lt;/#list&gt;</pre>
<pre>&lt;/#macro&gt;</pre>
<pre>&lt;@repeat count=4 ; c, halfc, last&gt;</pre>
<pre>  ${c}. ${halfc}&lt;#if last&gt; Last!&lt;/#if&gt;</pre>
<pre>&lt;/@repeat&gt;</pre>
<p>输出结果：</p>
<pre>  1. 0.5</pre>
<pre>  2. 1</pre>
<pre>  3. 1.5</pre>
<pre>  4. 2 Last!</pre>
<pre></pre>
<p>Ø         指定的循环变量的数目和用户定义指令开始标记指定的不同不会有问题</p>
<p>n         调用时少指定循环变量，则多指定的值不可见</p>
<p>n         调用时多指定循环变量，多余的循环变量不会被创建</p>
<h3  class="related_post_title">随机文章</h3><ul class="related_post"><li>2009年12月10日 -- <a href="http://www.havenliu.com/java/280.html" title="MyEclipse 7.5,MyEclipse 8.0中安装Flex插件">MyEclipse 7.5,MyEclipse 8.0中安装Flex插件</a></li><li>2009年07月28日 -- <a href="http://www.havenliu.com/bike/162.html" title="2009年第96届环法自行车赛第十九、二十、二十一站视频">2009年第96届环法自行车赛第十九、二十、二十一站视频</a></li><li>2009年06月30日 -- <a href="http://www.havenliu.com/goodarticle/74.html" title="惠普前总裁孙振耀指点职业规划（二）">惠普前总裁孙振耀指点职业规划（二）</a></li><li>2009年10月29日 -- <a href="http://www.havenliu.com/other/258.html" title="上海钓鱼执法事件">上海钓鱼执法事件</a></li><li>2009年07月7日 -- <a href="http://www.havenliu.com/mylife/119.html" title="回家听来的真实故事">回家听来的真实故事</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/goodarticle/420.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>自己写的一个Flex3多文件上传组件</title>
		<link>http://www.havenliu.com/web/327.html</link>
		<comments>http://www.havenliu.com/web/327.html#comments</comments>
		<pubDate>Wed, 31 Mar 2010 07:43:20 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[上传组件]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=327</guid>
		<description><![CDATA[最近在看《Flex3权威指南》，除了书中个别地方翻译的笔误外，确实是本好书，看的兴起，就写了这个多文件上传组件。
网上现成上传组件很多，有些写的很好，我的当然不能和别人那些牛人的相比，仅做学习交流之用，在代码组织和结构设计方面还有很多需要改进的地方，希望大家多提意见。
废话不多说，先看工作界面吧：

我的开发环境是Eclipse+Flex插件+Myeclipse（Myeclipse可有可无，这是我用来开发J2EE的），用MyEclipse7.5集成包的同志们安装Flex插件有困难的可以参考我前面的一篇文章：MyEclipse 7.5,MyEclipse 8.0中安装Flex插件。整个源文件的结构如下：

其实只要看flex_src和src两个目录就可以了。下面主要介绍下程序代码（至于怎样新建Flex Project，怎样下一步之类的就不再罗嗦了，实在不知道的自己Google去）：flex_src 目录下是所有的Flex源代码，src下面的是后台的接收代码（java 的servlet）。com.havenliu.event.DeleteEvent.as是一个自定义的Flex事件类，用来删除单个附件。cpt目录下的deletebtn.mxml是一个自定义删除组件，很简单，里面就一个删除按钮，但附件完成上传后，改按钮变成灰色；最主要的东西都在MyUpload.mxml文件中。

?Download MyUpload.mxml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
&#160;
&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;mx:Application xmlns:mx=&#34;http://www.adobe.com/2006/mxml&#34; layout=&#34;vertical&#34; fontSize=&#34;13&#34; creationComplete=&#34;init()&#34; xmlns:e=&#34;cpt.*&#34; &#62;
&#60;mx:Script&#62;
	&#60;!&#91;CDATA&#91;
		import com.havenliu.event.DeleteEvent;
		import cpt.deletebtn;
		import mx.events.CloseEvent;
		import mx.collections.ArrayCollection;
		import mx.controls.Alert;
		import flash.profiler.showRedrawRegions;
        import mx.controls.ProgressBar;
&#160;
        //最大上传文件数
		private var maxFiles:int=5;
		//最大上传文件大小(M)
		private var maxSize:Number=50;
		public var fileList:FileReferenceList = new FileReferenceList&#40;&#41;;
&#160;
		private var fileSize:Number=0;
		//后台接受附件的地址，这里是一个servlet，你可以自己定义为jsp、php、asp、action等
		private var uploadurl:URLRequest = new URLRequest&#40;&#34;http://localhost:8080/MyUpload/UploadFile&#34;&#41;;
		&#91;Bindable&#93;
		private var [...]]]></description>
			<content:encoded><![CDATA[<p>最近在看《Flex3权威指南》，除了书中个别地方翻译的笔误外，确实是本好书，看的兴起，就写了这个多文件上传组件。</p>
<p>网上现成上传组件很多，有些写的很好，我的当然不能和别人那些牛人的相比，仅做学习交流之用，在代码组织和结构设计方面还有很多需要改进的地方，希望大家多提意见。</p>
<p>废话不多说，先看工作界面吧：<img src="http://www.havenliu.com/wp-content/uploads/2010/03/init.jpg" alt="init" title="init" width="522" height="324" class="alignnone size-full wp-image-333" /><img class="alignnone size-full wp-image-336" title="work2" src="http://www.havenliu.com/wp-content/uploads/2010/03/work2.jpg" alt="work2" width="530" height="371" /><img class="alignnone size-full wp-image-335" title="work1" src="http://www.havenliu.com/wp-content/uploads/2010/03/work1.jpg" alt="work1" width="521" height="318" /></p>
<p><span id="more-327"></span></p>
<p>我的开发环境是Eclipse+Flex插件+Myeclipse（Myeclipse可有可无，这是我用来开发J2EE的），用MyEclipse7.5集成包的同志们安装Flex插件有困难的可以参考我前面的一篇文章：<a title="MyEclipse  7.5,MyEclipse 8.0中安装Flex插件" href="../java/280.html">MyEclipse 7.5,MyEclipse 8.0中安装Flex插件</a>。整个源文件的结构如下：</p>
<p><img class="alignnone size-full wp-image-334" title="tree" src="http://www.havenliu.com/wp-content/uploads/2010/03/tree.jpg" alt="tree" width="246" height="503" /></p>
<p>其实只要看flex_src和src两个目录就可以了。下面主要介绍下程序代码（至于怎样新建Flex Project，怎样下一步之类的就不再罗嗦了，实在不知道的自己Google去）：flex_src 目录下是所有的Flex源代码，src下面的是后台的接收代码（java 的servlet）。com.havenliu.event.DeleteEvent.as是一个自定义的Flex事件类，用来删除单个附件。cpt目录下的deletebtn.mxml是一个自定义删除组件，很简单，里面就一个删除按钮，但附件完成上传后，改按钮变成灰色；最主要的东西都在MyUpload.mxml文件中。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.havenliu.com/wp-content/plugins/wp-codebox/wp-codebox.php?p=327&amp;download=MyUpload.mxml">MyUpload.mxml</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p3275"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
</pre></td><td class="code" id="p327code5"><pre class="actionscript" style="font-family:monospace;">&nbsp;
<span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:Application xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> layout=<span style="color: #ff0000;">&quot;vertical&quot;</span> fontSize=<span style="color: #ff0000;">&quot;13&quot;</span> creationComplete=<span style="color: #ff0000;">&quot;init()&quot;</span> xmlns:<span style="color: #0066CC;">e</span>=<span style="color: #ff0000;">&quot;cpt.*&quot;</span> <span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
		<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">havenliu</span>.<span style="color: #006600;">event</span>.<span style="color: #006600;">DeleteEvent</span>;
		<span style="color: #0066CC;">import</span> cpt.<span style="color: #006600;">deletebtn</span>;
		<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">events</span>.<span style="color: #006600;">CloseEvent</span>;
		<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">collections</span>.<span style="color: #006600;">ArrayCollection</span>;
		<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">controls</span>.<span style="color: #006600;">Alert</span>;
		<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">profiler</span>.<span style="color: #006600;">showRedrawRegions</span>;
        <span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">controls</span>.<span style="color: #006600;">ProgressBar</span>;
&nbsp;
        <span style="color: #808080; font-style: italic;">//最大上传文件数</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> maxFiles:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">5</span>;
		<span style="color: #808080; font-style: italic;">//最大上传文件大小(M)</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> maxSize:<span style="color: #0066CC;">Number</span>=<span style="color: #cc66cc;">50</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> fileList:FileReferenceList = <span style="color: #000000; font-weight: bold;">new</span> FileReferenceList<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> fileSize:<span style="color: #0066CC;">Number</span>=<span style="color: #cc66cc;">0</span>;
		<span style="color: #808080; font-style: italic;">//后台接受附件的地址，这里是一个servlet，你可以自己定义为jsp、php、asp、action等</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> uploadurl:URLRequest = <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://localhost:8080/MyUpload/UploadFile&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> files:ArrayCollection=<span style="color: #000000; font-weight: bold;">new</span> ArrayCollection<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">//附件选择监听器</span>
			fileList.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">SELECT</span>,selectHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #808080; font-style: italic;">//给“添加”按钮注册监听器</span>
			browse.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>,browseHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #808080; font-style: italic;">//删除附件按钮注册监听器</span>
			deleteAll.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>,resetHandler<span style="color: #66cc66;">&#41;</span>;
			buttonState<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> selectHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> countfiles:<span style="color: #0066CC;">int</span>=files.<span style="color: #0066CC;">length</span>+fileList.<span style="color: #006600;">fileList</span>.<span style="color: #0066CC;">length</span>;
			<span style="color: #000000; font-weight: bold;">var</span> countsize:<span style="color: #0066CC;">Number</span>=<span style="color: #cc66cc;">0</span>;
			<span style="color: #808080; font-style: italic;">//计算总附件大小</span>
			<span style="color: #b1b100;">for</span> each<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> _file:FileReference <span style="color: #b1b100;">in</span> fileList.<span style="color: #006600;">fileList</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				countsize+=_file.<span style="color: #0066CC;">size</span>;
			<span style="color: #66cc66;">&#125;</span>
			countsize+=fileSize;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>countfiles<span style="color: #66cc66;">&gt;</span>maxFiles<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				Alert.<span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;一次最大只能上传&quot;</span>+maxFiles+<span style="color: #ff0000;">&quot;个附件&quot;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>countsize<span style="color: #66cc66;">&gt;</span>maxSize<span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1024</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">1024</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				Alert.<span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;附件大小不能超过&quot;</span>+maxSize+<span style="color: #ff0000;">&quot;M&quot;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">for</span> each<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> file:FileReference <span style="color: #b1b100;">in</span> fileList.<span style="color: #006600;">fileList</span><span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#123;</span>
					<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">!</span>checkDitto<span style="color: #66cc66;">&#40;</span>file<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
					<span style="color: #66cc66;">&#123;</span>
						files.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span>file<span style="color: #66cc66;">&#41;</span>;
						refreshText<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
						buttonState<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
					<span style="color: #66cc66;">&#125;</span>
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> browseHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">//这里没有过滤文件类型，即所有文件都可以上传，实际开发中，为了安全考虑可能需要过滤</span>
			<span style="color: #000000; font-weight: bold;">var</span> fileType:FileFilter=<span style="color: #000000; font-weight: bold;">new</span> FileFilter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;文件类型(*.*)&quot;</span>,<span style="color: #ff0000;">&quot;*.*&quot;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">var</span> allTypes:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span>fileType<span style="color: #66cc66;">&#41;</span>;				
			fileList.<span style="color: #006600;">browse</span><span style="color: #66cc66;">&#40;</span>allTypes<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> resetHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			Alert.<span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;您确定要删除全部附件？&quot;</span>,<span style="color: #ff0000;">&quot;提示信息&quot;</span>,Alert.<span style="color: #006600;">YES</span><span style="color: #66cc66;">|</span>Alert.<span style="color: #006600;">NO</span>,fileGrid,alertHandler,<span style="color: #000000; font-weight: bold;">null</span>,Alert.<span style="color: #006600;">NO</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">function</span> alertHandler<span style="color: #66cc66;">&#40;</span>event:CloseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">detail</span>==Alert.<span style="color: #006600;">YES</span><span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#123;</span>
					files.<span style="color: #006600;">removeAll</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
					refreshText<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
					buttonState<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">//更新Text文本信息</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> refreshText<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">//重新统计附件大小，将原来的信息清0</span>
			fileSize=<span style="color: #cc66cc;">0</span>;
			<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>;i<span style="color: #66cc66;">&lt;</span>files.<span style="color: #0066CC;">length</span>;i++<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				fileSize+=FileReference<span style="color: #66cc66;">&#40;</span>files<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">size</span>;
			<span style="color: #66cc66;">&#125;</span>
			msg.<span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;共计&quot;</span>+files.<span style="color: #0066CC;">length</span>+<span style="color: #ff0000;">&quot;个附件，文件总大小：&quot;</span>+<span style="color: #66cc66;">&#40;</span>fileSize<span style="color: #66cc66;">/</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1024</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">1024</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">slice</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span>+<span style="color: #ff0000;">&quot;M (最大上传5个附件，总大小不超过50M)&quot;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">//控制按钮状态</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> buttonState<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>files.<span style="color: #006600;">length</span><span style="color: #66cc66;">&lt;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				upload.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">false</span>;
				deleteAll.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">false</span>;
			<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span>
			<span style="color: #66cc66;">&#123;</span>
				upload.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">true</span>;
				deleteAll.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">true</span>;
			<span style="color: #66cc66;">&#125;</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>files.<span style="color: #006600;">length</span><span style="color: #66cc66;">&gt;</span>=maxFiles<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				browse.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">false</span>;
			<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span>
			<span style="color: #66cc66;">&#123;</span>
				browse.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">true</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> uploadfile<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>files.<span style="color: #006600;">length</span><span style="color: #66cc66;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>;i<span style="color: #66cc66;">&lt;</span>files.<span style="color: #0066CC;">length</span>;i++<span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#123;</span>
					<span style="color: #000000; font-weight: bold;">var</span> file:FileReference=files<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> as FileReference;
					<span style="color: #0066CC;">try</span><span style="color: #66cc66;">&#123;</span>
						file.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>,uploadok<span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">//						 file.addEventListener(ProgressEvent.PROGRESS,uploadstart);</span>
						file.<span style="color: #006600;">upload</span><span style="color: #66cc66;">&#40;</span>uploadurl<span style="color: #66cc66;">&#41;</span>;
					<span style="color: #66cc66;">&#125;</span><span style="color: #0066CC;">catch</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">error</span>:<span style="color: #0066CC;">Error</span><span style="color: #66cc66;">&#41;</span>
					<span style="color: #66cc66;">&#123;</span>
						Alert.<span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;上传失败&quot;</span>,<span style="color: #0066CC;">error</span>.<span style="color: #0066CC;">message</span><span style="color: #66cc66;">&#41;</span>;
					<span style="color: #66cc66;">&#125;</span>
				<span style="color: #66cc66;">&#125;</span>
				<span style="color: #808080; font-style: italic;">//文件全部上传完成后，上传和全部删除按钮变为灰色</span>
				upload.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">false</span>;
				deleteAll.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">false</span>;
				browse.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">false</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//判断文件是否重复</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> checkDitto<span style="color: #66cc66;">&#40;</span>file:FileReference<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Boolean</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> result:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">false</span>;
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>;i<span style="color: #66cc66;">&lt;</span>files.<span style="color: #0066CC;">length</span>;i++<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">var</span> _file:FileReference=files<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;
				<span style="color: #808080; font-style: italic;">//如果选择文件的名字、大小和最后修改时间完全一样，则这两个文件重复</span>
				<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>file.<span style="color: #0066CC;">name</span>==_file.<span style="color: #0066CC;">name</span><span style="color: #66cc66;">||</span>file.<span style="color: #006600;">modificationDate</span>==_file.<span style="color: #006600;">modificationDate</span><span style="color: #66cc66;">||</span>file.<span style="color: #0066CC;">size</span>==_file.<span style="color: #0066CC;">size</span><span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#123;</span>
					result= <span style="color: #000000; font-weight: bold;">true</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #66cc66;">&#125;</span>
				<span style="color: #b1b100;">else</span>
				<span style="color: #66cc66;">&#123;</span>
					result= <span style="color: #000000; font-weight: bold;">false</span>;
				<span style="color: #66cc66;">&#125;</span>
			<span style="color: #66cc66;">&#125;</span>
			<span style="color: #b1b100;">return</span> result;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">public</span>  <span style="color: #000000; font-weight: bold;">function</span> deleteFile<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> indexNo:<span style="color: #0066CC;">int</span>=files.<span style="color: #006600;">getItemIndex</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span> as FileReference<span style="color: #66cc66;">&#41;</span>;
			files.<span style="color: #006600;">removeItemAt</span><span style="color: #66cc66;">&#40;</span>indexNo<span style="color: #66cc66;">&#41;</span>;
			refreshText<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			buttonState<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span>  <span style="color: #000000; font-weight: bold;">function</span> probar<span style="color: #66cc66;">&#40;</span>event:Event,<span style="color: #0066CC;">data</span>:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> probar:ProgressBar=event.<span style="color: #0066CC;">target</span> as ProgressBar;
			probar.<span style="color: #006600;">label</span> = <span style="color: #ff0000;">&quot;%3%%&quot;</span>;
            probar.<span style="color: #006600;">setProgress</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;
            <span style="color: #000000; font-weight: bold;">var</span> file:FileReference=<span style="color: #0066CC;">data</span> as FileReference;
            file.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ProgressEvent.<span style="color: #006600;">PROGRESS</span>,
            	<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>event: ProgressEvent<span style="color: #66cc66;">&#41;</span>: <span style="color: #0066CC;">void</span>
	                 <span style="color: #66cc66;">&#123;</span>
	                     probar.<span style="color: #006600;">setProgress</span><span style="color: #66cc66;">&#40;</span>event.<span style="color: #0066CC;">bytesLoaded</span>, event.<span style="color: #0066CC;">bytesTotal</span><span style="color: #66cc66;">&#41;</span>;
	                <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> uploadok<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> file: FileReference = event.<span style="color: #0066CC;">target</span> as FileReference;
			file.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>,uploadok<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;上载完成&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #66cc66;">&#125;</span>
<span style="color: #808080; font-style: italic;">//		private function uploadstart(event:Event):void</span>
<span style="color: #808080; font-style: italic;">//		{</span>
<span style="color: #808080; font-style: italic;">//			trace(&quot;上载开始&quot;);</span>
<span style="color: #808080; font-style: italic;">//		}</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> deletefile<span style="color: #66cc66;">&#40;</span>event:DeleteEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> delfile:FileReference=event.<span style="color: #006600;">file</span>;
			deleteFile<span style="color: #66cc66;">&#40;</span>delfile<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:Panel <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;500&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;300&quot;</span> layout=<span style="color: #ff0000;">&quot;absolute&quot;</span> title=<span style="color: #ff0000;">&quot;多文件上传组件&quot;</span><span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>mx:VBox <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> x=<span style="color: #ff0000;">&quot;0&quot;</span> y=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #66cc66;">&gt;</span>
					<span style="color: #66cc66;">&lt;</span>mx:DataGrid id=<span style="color: #ff0000;">&quot;fileGrid&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> dataProvider=<span style="color: #ff0000;">&quot;{files}&quot;</span><span style="color: #66cc66;">&gt;</span>
						<span style="color: #66cc66;">&lt;</span>mx:columns<span style="color: #66cc66;">&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:DataGridColumn headerText=<span style="color: #ff0000;">&quot;文件名&quot;</span> dataField=<span style="color: #ff0000;">&quot;name&quot;</span> <span style="color: #66cc66;">/&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:DataGridColumn <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;80&quot;</span> headerText=<span style="color: #ff0000;">&quot;大小(字节)&quot;</span> dataField=<span style="color: #ff0000;">&quot;size&quot;</span><span style="color: #66cc66;">/&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:DataGridColumn <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;120&quot;</span> headerText=<span style="color: #ff0000;">&quot;上传进度&quot;</span> dataField=<span style="color: #ff0000;">&quot;loadRate&quot;</span> sortable=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #66cc66;">&gt;&lt;</span>mx:itemRenderer<span style="color: #66cc66;">&gt;</span>
								<span style="color: #66cc66;">&lt;</span>mx:Component<span style="color: #66cc66;">&gt;</span>
								<span style="color: #66cc66;">&lt;</span>mx:HBox fontSize=<span style="color: #ff0000;">&quot;10&quot;</span> fontWeight=<span style="color: #ff0000;">&quot;normal&quot;</span> fontThickness=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #66cc66;">&gt;</span>
								<span style="color: #66cc66;">&lt;</span>mx:ProgressBar verticalCenter=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> paddingLeft=<span style="color: #ff0000;">&quot;5&quot;</span> paddingRight=<span style="color: #ff0000;">&quot;5&quot;</span>
                                    maximum=<span style="color: #ff0000;">&quot;100&quot;</span> minimum=<span style="color: #ff0000;">&quot;0&quot;</span> labelPlacement=<span style="color: #ff0000;">&quot;center&quot;</span> mode=<span style="color: #ff0000;">&quot;manual&quot;</span>
                                   label=<span style="color: #ff0000;">&quot;%3%%&quot;</span> textAlign=<span style="color: #ff0000;">&quot;left&quot;</span> creationComplete=<span style="color: #ff0000;">&quot;outerDocument.probar(event,data)&quot;</span><span style="color: #66cc66;">/&gt;</span>
                                   <span style="color: #66cc66;">&lt;/</span>mx:HBox<span style="color: #66cc66;">&gt;</span>
								<span style="color: #66cc66;">&lt;/</span>mx:Component<span style="color: #66cc66;">&gt;</span>
								<span style="color: #66cc66;">&lt;/</span>mx:itemRenderer<span style="color: #66cc66;">&gt;</span>
							<span style="color: #66cc66;">&lt;/</span>mx:DataGridColumn<span style="color: #66cc66;">&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:DataGridColumn    headerText=<span style="color: #ff0000;">&quot;删除&quot;</span> sortable=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #66cc66;">&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:itemRenderer<span style="color: #66cc66;">&gt;</span> 
								<span style="color: #66cc66;">&lt;</span>mx:Component<span style="color: #66cc66;">&gt;</span> 
								<span style="color: #66cc66;">&lt;</span>e:deletebtn  tarfile=<span style="color: #ff0000;">&quot;{data as FileReference}&quot;</span> delFile=<span style="color: #ff0000;">&quot;outerDocument.deletefile(event)&quot;</span><span style="color: #66cc66;">&gt;</span>
								<span style="color: #66cc66;">&lt;/</span><span style="color: #0066CC;">e</span>:deletebtn<span style="color: #66cc66;">&gt;</span>
								<span style="color: #66cc66;">&lt;/</span>mx:Component<span style="color: #66cc66;">&gt;</span> 
								<span style="color: #66cc66;">&lt;/</span>mx:itemRenderer<span style="color: #66cc66;">&gt;</span>
							<span style="color: #66cc66;">&lt;/</span>mx:DataGridColumn<span style="color: #66cc66;">&gt;</span>
						<span style="color: #66cc66;">&lt;/</span>mx:columns<span style="color: #66cc66;">&gt;</span>
					<span style="color: #66cc66;">&lt;/</span>mx:DataGrid<span style="color: #66cc66;">&gt;</span>
					<span style="color: #66cc66;">&lt;</span>mx:HBox <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;39&quot;</span><span style="color: #66cc66;">&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:Spacer<span style="color: #66cc66;">/&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">Button</span>  id=<span style="color: #ff0000;">&quot;browse&quot;</span> label=<span style="color: #ff0000;">&quot;添加...&quot;</span> textAlign=<span style="color: #ff0000;">&quot;right&quot;</span><span style="color: #66cc66;">/&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">Button</span> id=<span style="color: #ff0000;">&quot;upload&quot;</span> label=<span style="color: #ff0000;">&quot;上传&quot;</span> click=<span style="color: #ff0000;">&quot;uploadfile()&quot;</span> textAlign=<span style="color: #ff0000;">&quot;right&quot;</span><span style="color: #66cc66;">/&gt;</span>
							<span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">Button</span> id=<span style="color: #ff0000;">&quot;deleteAll&quot;</span> label=<span style="color: #ff0000;">&quot;全部删除&quot;</span> textAlign=<span style="color: #ff0000;">&quot;right&quot;</span><span style="color: #66cc66;">/&gt;</span>
					<span style="color: #66cc66;">&lt;/</span>mx:HBox<span style="color: #66cc66;">&gt;</span>
					<span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">Text</span> id=<span style="color: #ff0000;">&quot;msg&quot;</span> <span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;共计0个附件，文件总大小：0M (最大上传5个附件，总大小不超过50M)&quot;</span> fontSize=<span style="color: #ff0000;">&quot;12&quot;</span> fontFamily=<span style="color: #ff0000;">&quot;Arial&quot;</span><span style="color: #66cc66;">/&gt;</span>
			<span style="color: #66cc66;">&lt;/</span>mx:VBox<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Panel<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;/</span>mx:Application<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>DeleteEvent.as的源代码：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.havenliu.com/wp-content/plugins/wp-codebox/wp-codebox.php?p=327&amp;download=DeleteEvent.as">DeleteEvent.as</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p3276"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code" id="p327code6"><pre class="actionscript" style="font-family:monospace;">package com.<span style="color: #006600;">havenliu</span>.<span style="color: #006600;">event</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">FileReference</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DeleteEvent <span style="color: #0066CC;">extends</span> Event
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">//当前要删除的附件</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> file:FileReference;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> DeleteEvent<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span>:<span style="color: #0066CC;">String</span>,file:FileReference<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">file</span>=file;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>deletebtn.mxml组件的源代码：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.havenliu.com/wp-content/plugins/wp-codebox/wp-codebox.php?p=327&amp;download=deletebtn.mxml">deletebtn.mxml</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p3277"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code" id="p327code7"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:Canvas xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> creationComplete=<span style="color: #ff0000;">&quot;btnlis()&quot;</span><span style="color: #66cc66;">&gt;</span>
 <span style="color: #66cc66;">&lt;</span>mx:Metadata<span style="color: #66cc66;">&gt;</span>
        <span style="color: #66cc66;">&#91;</span>Event<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;delFile&quot;</span>, <span style="color: #0066CC;">type</span>=<span style="color: #ff0000;">&quot;com.havenliu.event.DeleteEvent&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
 <span style="color: #66cc66;">&lt;/</span>mx:Metadata<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">havenliu</span>.<span style="color: #006600;">event</span>.<span style="color: #006600;">DeleteEvent</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> tarfile:FileReference;
&nbsp;
		internal <span style="color: #000000; font-weight: bold;">function</span> deleteFile<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> delevent:DeleteEvent=<span style="color: #000000; font-weight: bold;">new</span> DeleteEvent<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;delFile&quot;</span>,tarfile<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">dispatchEvent</span><span style="color: #66cc66;">&#40;</span>delevent<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span> 
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> comlis<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			deletebutton.<span style="color: #0066CC;">enabled</span>=<span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> btnlis<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">//给当前附件注册监听器，如果附件已经上传完成，则将删除按钮的enabled设置为false(不可操作)</span>
			tarfile.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>,comlis<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">Button</span> id=<span style="color: #ff0000;">&quot;deletebutton&quot;</span> label=<span style="color: #ff0000;">&quot;删除&quot;</span> click=<span style="color: #ff0000;">&quot;deleteFile()&quot;</span> <span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Button<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:Canvas<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>后台接收文件的源代码。这里用的是java做的后台。用Servlet接收的。你可以用php或者asp做后台都无所谓，选择自己熟悉的就行：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.havenliu.com/wp-content/plugins/wp-codebox/wp-codebox.php?p=327&amp;download=UploadFile.java">UploadFile.java</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p3278"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
</pre></td><td class="code" id="p327code8"><pre class="java" style="font-family:monospace;">&nbsp;
<span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.havenliu.servlet</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.File</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Iterator</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.List</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.servlet.ServletException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.servlet.http.HttpServlet</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.servlet.http.HttpServletRequest</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.servlet.http.HttpServletResponse</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.commons.fileupload.FileItem</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.commons.fileupload.FileUploadException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.commons.fileupload.disk.DiskFileItemFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.commons.fileupload.servlet.ServletFileUpload</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> UploadFile <span style="color: #000000; font-weight: bold;">extends</span> HttpServlet <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> doGet<span style="color: #009900;">&#40;</span>HttpServletRequest request, HttpServletResponse response<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> ServletException, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a> <span style="color: #009900;">&#123;</span>
&nbsp;
		doPost<span style="color: #009900;">&#40;</span>request,response<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> doPost<span style="color: #009900;">&#40;</span>HttpServletRequest request, HttpServletResponse response<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> ServletException, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a> <span style="color: #009900;">&#123;</span>
&nbsp;
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> tempDir<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;C:<span style="color: #000099; font-weight: bold;">\\</span>temp<span style="color: #000099; font-weight: bold;">\\</span>&quot;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//文件存储路径</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> saveDir<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;C:<span style="color: #000099; font-weight: bold;">\\</span>temp<span style="color: #000099; font-weight: bold;">\\</span>save<span style="color: #000099; font-weight: bold;">\\</span>&quot;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//临时文件存储路径</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a><span style="color: #009900;">&#40;</span>saveDir<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">isDirectory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a><span style="color: #009900;">&#40;</span>saveDir<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">mkdirs</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a><span style="color: #009900;">&#40;</span>tempDir<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">isDirectory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a><span style="color: #009900;">&#40;</span>tempDir<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">mkdirs</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		DiskFileItemFactory dfif <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DiskFileItemFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		dfif.<span style="color: #006633;">setSizeThreshold</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4096</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		dfif.<span style="color: #006633;">setRepository</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a><span style="color: #009900;">&#40;</span>tempDir<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		ServletFileUpload sfu <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ServletFileUpload<span style="color: #009900;">&#40;</span>dfif<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		sfu.<span style="color: #006633;">setHeaderEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;utf-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 设置最大上传尺寸</span>
		sfu.<span style="color: #006633;">setSizeMax</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">50</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">1024</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">1024</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// 从request得到 所有 上传域的列表</span>
		List<span style="color: #339933;">&lt;</span>Object<span style="color: #339933;">&gt;</span> fileList <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			fileList <span style="color: #339933;">=</span> sfu.<span style="color: #006633;">parseRequest</span><span style="color: #009900;">&#40;</span>request<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>FileUploadException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">// 处理文件尺寸过大异常</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>fileList <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">||</span> fileList.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span>
		<span style="color: #666666; font-style: italic;">// 得到所有上传的文件</span>
		Iterator<span style="color: #339933;">&lt;</span>Object<span style="color: #339933;">&gt;</span> fileItr <span style="color: #339933;">=</span> fileList.<span style="color: #006633;">iterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>fileItr.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			 FileItem item <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>FileItem<span style="color: #009900;">&#41;</span> fileItr.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>item.<span style="color: #006633;">isFormField</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                 <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name <span style="color: #339933;">=</span> item.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                     item.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a><span style="color: #009900;">&#40;</span>saveDir <span style="color: #339933;">+</span> name<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Exception</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                     e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 <span style="color: #009900;">&#125;</span>
             <span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>最后别忘了在web.xml中注册你的servlet。<br />
到这里基本就差不多了，代码中的注释基本能看懂了。人品不是很差的话应该能直接跑起来了。源代码包就不放上来了，主要是没地方上传，那些网盘什么的我不太喜欢用。需要的朋友们留下邮箱我发给你们。</p>
<p><span style="color: #ff6600;">PS：最后叽歪两句：现在找个满意的图床真难啊，国内的基本不敢用，很多不稳定，开始还好，最后那天就悄然无声的关服务器了，让你哭都哭不出来。稳定的很多又不支持外链，类似163之类的；那些支持的外链、也勉强能算的上稳定的又有很多莫名奇妙的规矩，限制大小和流量啊（这还好，还勉强能接受），自做主张的给你的图片加水印（最不能接收这点）什么。国外的好的图床到是蛮多，比如google的picasa 、雅虎的flickr什么的，这些都用过，但最后都在伟大的GFW下壮烈牺牲了，就算有些坚持到现在还能用，但谁也不敢保证明天早上我打开的我的blog不看见红叉叉。犹豫再三。国外的也不敢用了。。。。。。在折腾了两天后，终于决定把文章里的图片就放在我自己的空间里，从长远来考虑这不太好，但这也是目前最好的选择了。。。。。。。</span></p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年12月10日 -- <a href="http://www.havenliu.com/java/280.html" title="MyEclipse 7.5,MyEclipse 8.0中安装Flex插件">MyEclipse 7.5,MyEclipse 8.0中安装Flex插件</a></li><li>2009年08月14日 -- <a href="http://www.havenliu.com/java/191.html" title="发贴器有了比较大的进展">发贴器有了比较大的进展</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/web/327.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Error listenerStart错误，Tomcat终极排错杀手</title>
		<link>http://www.havenliu.com/web/298.html</link>
		<comments>http://www.havenliu.com/web/298.html#comments</comments>
		<pubDate>Thu, 31 Dec 2009 03:04:03 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Web开发]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=298</guid>
		<description><![CDATA[在整合Spring+hibernate+Flex的时候，出项Error listenerStart错误，折腾的人都快疯了，由于Tomcat默认情况下不记录应用程序错误，就启动时候报个Error listenerStart就完事，根本不知道哪里出问题了，没办法，只能用log4j来排查。
首先新建一个log4j.properties文件。对log4j不熟的就直接把下面的内容复制进去就可以了：
log4j.rootLogger=info,Console,R
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c &#8211; %m%n
log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L &#8211; %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/tomcat.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L):? %m%n
log4j.logger.org.apache=info, R
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R
log4j.logger.org.apache.catalina.core=info, R
log4j.logger.org.apache.catalina.session=info, R
然后把log4j.properties放在tomcat安装目录下的/common/classes目录里面，还要找log4j.jar和commons-logging.jar两个jar包，放到tomcat安装目录下的/common/lib里，这三步缺一不可，然后再启动tomcat，错误就现原型了，原来了包冲突：spring和hibernate自带的包中都包含有asm.jar，所以要把asm.jar，asm-attrs.jar和cglib-2.1.3.jar删掉，注意。一定要要把asm-attrs.jar和cglib-2.1.3.jar也删掉，只保留asm-2.2.2.jar ，asm-commons-2.2.2.jar，asm-util-2.2.2.jar，我开始就是忽略了cglib-2.1.3.jar，一直找不到问题的原因。
最后别忘了删掉log4j.properties，log4j产生的日志文件很庞大，一个不小心会塞爆你的硬盘。毕竟，杀手锏不是用来随便用的！
随机文章2009年11月2日 -- MySql access denied for user错误2010年09月7日 -- 青海湖骑行之三2009年10月29日 -- 上海钓鱼执法事件2009年07月19日 -- 2009年第96届环法自行车赛第十一、十二、十三，十四站视频2009年08月23日 -- 徽杭古道归来]]></description>
			<content:encoded><![CDATA[<p>在整合Spring+hibernate+Flex的时候，出项Error listenerStart错误，折腾的人都快疯了，由于Tomcat默认情况下不记录应用程序错误，就启动时候报个Error listenerStart就完事，根本不知道哪里出问题了，没办法，只能用log4j来排查。</p>
<p>首先新建一个log4j.properties文件。对log4j不熟的就直接把下面的内容复制进去就可以了：</p>
<p>log4j.rootLogger=info,Console,R<br />
log4j.appender.Console=org.apache.log4j.ConsoleAppender<br />
log4j.appender.Console.layout=org.apache.log4j.PatternLayout<br />
#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c &#8211; %m%n<br />
log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L &#8211; %m%n<br />
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br />
log4j.appender.R.File=${catalina.home}/logs/tomcat.log<br />
log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L):? %m%n<br />
log4j.logger.org.apache=info, R<br />
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R<br />
log4j.logger.org.apache.catalina.core=info, R<br />
log4j.logger.org.apache.catalina.session=info, R</p>
<p>然后把log4j.properties放在tomcat安装目录下的/common/classes目录里面，还要找log4j.jar和commons-logging.jar两个jar包，放到tomcat安装目录下的/common/lib里，这三步缺一不可，然后再启动tomcat，错误就现原型了，原来了包冲突：spring和hibernate自带的包中都包含有asm.jar，所以要把asm.jar，asm-attrs.jar和cglib-2.1.3.jar删掉，注意。一定要要把asm-attrs.jar和cglib-2.1.3.jar也删掉，只保留asm-2.2.2.jar ，asm-commons-2.2.2.jar，asm-util-2.2.2.jar，我开始就是忽略了cglib-2.1.3.jar，一直找不到问题的原因。</p>
<p>最后别忘了删掉log4j.properties，log4j产生的日志文件很庞大，一个不小心会塞爆你的硬盘。毕竟，杀手锏不是用来随便用的！</p>
<h3  class="related_post_title">随机文章</h3><ul class="related_post"><li>2009年10月29日 -- <a href="http://www.havenliu.com/other/258.html" title="上海钓鱼执法事件">上海钓鱼执法事件</a></li><li>2009年07月5日 -- <a href="http://www.havenliu.com/bike/113.html" title="2009年第96届环法自行车赛第一赛段个人计时赛视频">2009年第96届环法自行车赛第一赛段个人计时赛视频</a></li><li>2009年07月9日 -- <a href="http://www.havenliu.com/bike/139.html" title=" 2009年第96届环法自行车赛第六站视频"> 2009年第96届环法自行车赛第六站视频</a></li><li>2010年04月16日 -- <a href="http://www.havenliu.com/other/374.html" title="网通DNS又出问题了">网通DNS又出问题了</a></li><li>2010年05月15日 -- <a href="http://www.havenliu.com/bike/423.html" title="江南古镇之【骑行南浔】">江南古镇之【骑行南浔】</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/web/298.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery基础入门-输入验证</title>
		<link>http://www.havenliu.com/web/238.html</link>
		<comments>http://www.havenliu.com/web/238.html#comments</comments>
		<pubDate>Mon, 21 Sep 2009 03:27:29 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=238</guid>
		<description><![CDATA[以前对JQuery一直保持观望态度，没太深入研究。最近一个项目，到现在第一阶段算是快完成了，发现和同事的javascript代码功能重复的很多，重用性也不好，冗余代码也很多，才想到了转用JQuery开发框架。找了点资料来看了下，发现JQuery相当强大，真是相见恨晚啦！
这篇教程是最基础的JQuery入门教程。为了刚接触JQuery的人能看懂，代码写的比较繁琐，主要是为了写注释方便，如果看了还有不懂的可以联系我，大家共同探讨.

代码点击可以直接下载看效果，注意js文件结构，js文件（包括jquery.js）要放在js文件夹下面，jquery.js大家可以到Jquery的官网去下载：jquery.com
html文件：

?Download verify.html&#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34;&#62;
&#60;html&#62;
  &#60;head&#62;
    &#60;title&#62;输入验证&#60;/title&#62;
    &#60;meta http-equiv=&#34;keywords&#34; content=&#34;keyword1,keyword2,keyword3&#34;&#62;
    &#60;meta http-equiv=&#34;description&#34; content=&#34;this is my page&#34;&#62;
    &#60;meta http-equiv=&#34;content-type&#34; content=&#34;text/html; charset=UTF-8&#34;&#62;
    &#60;script src=&#34;js/jquery.js&#34; type=&#34;text/javascript&#34; &#62;&#60;/script&#62;
    &#60;script src=&#34;js/verify.js&#34; type=&#34;text/javascript&#34; &#62;&#60;/script&#62;
&#160;
&#160;
    &#60;style type=&#34;text/css&#34;&#62;
&#60;!--
.warning{
	border:1px [...]]]></description>
			<content:encoded><![CDATA[<p>以前对JQuery一直保持观望态度，没太深入研究。最近一个项目，到现在第一阶段算是快完成了，发现和同事的javascript代码功能重复的很多，重用性也不好，冗余代码也很多，才想到了转用JQuery开发框架。找了点资料来看了下，发现JQuery相当强大，真是相见恨晚啦！</p>
<p>这篇教程是最基础的JQuery入门教程。为了刚接触JQuery的人能看懂，代码写的比较繁琐，主要是为了写注释方便，如果看了还有不懂的可以联系我，大家共同探讨.<br />
<span id="more-238"></span><br />
代码点击可以直接下载看效果，注意js文件结构，js文件（包括jquery.js）要放在js文件夹下面，jquery.js大家可以到Jquery的官网去下载：<a href="jquery.com">jquery.com</a></p>
<p>html文件：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.havenliu.com/wp-content/plugins/wp-codebox/wp-codebox.php?p=238&amp;download=verify.html">verify.html</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p23811"><td class="code" id="p238code11"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;输入验证&lt;/title&gt;
    &lt;meta http-equiv=&quot;keywords&quot; content=&quot;keyword1,keyword2,keyword3&quot;&gt;
    &lt;meta http-equiv=&quot;description&quot; content=&quot;this is my page&quot;&gt;
    &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
    &lt;script src=&quot;js/jquery.js&quot; type=&quot;text/javascript&quot; &gt;&lt;/script&gt;
    &lt;script src=&quot;js/verify.js&quot; type=&quot;text/javascript&quot; &gt;&lt;/script&gt;
&nbsp;
&nbsp;
    &lt;style type=&quot;text/css&quot;&gt;
&lt;!--
.warning{
	border:1px  solid red;
}
--&gt;
    &lt;/style&gt;
  &lt;/head&gt;
&nbsp;
  &lt;body&gt;
    请输入用户名：
    &lt;input type=&quot;text&quot; name=&quot;userName&quot; id=&quot;userName&quot; &gt;&lt;input id=&quot;verify&quot; type=&quot;button&quot; value=&quot;verify&quot;&gt;
    &lt;div id=&quot;show&quot;&gt;&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>js文件：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.havenliu.com/wp-content/plugins/wp-codebox/wp-codebox.php?p=238&amp;download=verify.js">verify.js</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p23812"><td class="code" id="p238code12"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//初始化，$(document).ready()表示页面加载完成后执行</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
&nbsp;
	<span style="color: #006600; font-style: italic;">//找到页面上id为verify的按钮。并为它添加点击事件,click为jquery的点击事件</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#verify&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">//当按钮点击的时候执行下面的代码</span>
		<span style="color: #006600; font-style: italic;">//找到页面上id为userName的文本框，并获取文本框内的值，用jquery提供的val方法</span>
		<span style="color: #003366; font-weight: bold;">var</span> userName<span style="color: #339933;">=</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#userName&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #006600; font-style: italic;">//判断userName的值是不是为空</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>userName<span style="color: #339933;">==</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #006600; font-style: italic;">//如果为空，提示用户</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#show&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;用户名不能为空&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
			<span style="color: #006600; font-style: italic;">//如果不为空，则将userName的值发送给服务器端，校验是否重复等，这里简化操作，直接判断如果userName的值为admin，则提示用户名重复</span>
		<span style="color: #006600; font-style: italic;">/**	
			//如果使用服务器端来校验userName，使用juery提供的get方法，get方法的有三个参数，第一个是服务器端的url，
			// 第二个是发送给服务器端的数据，这里我的数据直接在前面的url中已经传递过去，所以为null，
			// 第三个参数是一个function，它表示服务器端校验完成，返回后需要调用的函数
			$.get(&quot;verify.action?userName=&quot;+userName,null,function(response){
				//将服务器端返回的值显示在div中
				$(&quot;#show&quot;).html(response);
			});
			*/</span>
			<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>userName<span style="color: #339933;">==</span><span style="color: #3366CC;">&quot;admin&quot;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
					$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#show&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;用户名已经存在&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span>
			<span style="color: #009900;">&#123;</span>
					$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#show&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;恭喜您，该用户名可以注册&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//找到页面上id为userName的输入框，并为它添加键盘出发事件，keyup为jquery的键盘触发事件，表示键盘上某个键被按下后弹起来后触发</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#userName&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">keyup</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">//找到页面上id为userName的文本框，并获取文本框内的值，用jquery提供的val方法</span>
		<span style="color: #003366; font-weight: bold;">var</span> userName<span style="color: #339933;">=</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#userName&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #006600; font-style: italic;">//如果userName的值内空，则文本框显示红色</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>userName<span style="color: #339933;">==</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #006600; font-style: italic;">//addClass是JQuery提供的方法，表示给某个页面控件添加一个class</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;warning&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #006600; font-style: italic;">//removeClass是JQuery提供的方法，表示给某个页面控件删除class</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;warning&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2010年05月27日 -- <a href="http://www.havenliu.com/web/446.html" title="Jquery html(val)使用注意">Jquery html(val)使用注意</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/web/238.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Javascript 操作select控件大全（新增、修改、删除、选中、清空、判断存在等）</title>
		<link>http://www.havenliu.com/web/181.html</link>
		<comments>http://www.havenliu.com/web/181.html#comments</comments>
		<pubDate>Sun, 09 Aug 2009 00:53:06 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=181</guid>
		<description><![CDATA[ 1判断select选项中 是否存在Value=&#8221;paraValue&#8221;的Item
 2向select选项中 加入一个Item
 3从select选项中 删除一个Item
 4删除select中选中的项
 5修改select选项中 value=&#8221;paraValue&#8221;的text为&#8221;paraText&#8221;
 6设置select中text=&#8221;paraText&#8221;的第一个Item为选中
 7设置select中value=&#8221;paraValue&#8221;的Item为选中
 8得到select的当前选中项的value
 9得到select的当前选中项的text
10得到select的当前选中项的Index
11清空select的项



?View Code JAVASCRIPTjs 代码
// 1.判断select选项中 是否存在Value=&#34;paraValue&#34;的Item        
function jsSelectIsExitItem&#40;objSelect, objItemValue&#41; &#123;        
    var isExit = false;        
    for &#40;var i [...]]]></description>
			<content:encoded><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><span style="color: #008080;"> 1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">判断select选项中 是否存在Value=&#8221;paraValue&#8221;的Item<br />
</span><span style="color: #008080;"> 2</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />向select选项中 加入一个Item<br />
</span><span style="color: #008080;"> 3</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />从select选项中 删除一个Item<br />
</span><span style="color: #008080;"> 4</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />删除select中选中的项<br />
</span><span style="color: #008080;"> 5</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />修改select选项中 value=&#8221;paraValue&#8221;的text为&#8221;paraText&#8221;<br />
</span><span style="color: #008080;"> 6</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />设置select中text=&#8221;paraText&#8221;的第一个Item为选中<br />
</span><span style="color: #008080;"> 7</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />设置select中value=&#8221;paraValue&#8221;的Item为选中<br />
</span><span style="color: #008080;"> 8</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />得到select的当前选中项的value<br />
</span><span style="color: #008080;"> 9</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />得到select的当前选中项的text<br />
</span><span style="color: #008080;">10</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />得到select的当前选中项的Index<br />
</span><span style="color: #008080;">11</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" alt="" align="top" />清空select的项<br />
</span></div>
<p><span id="more-181"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p181code14'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p18114"><td class="code" id="p181code14"><pre class="javascript" style="font-family:monospace;">js 代码
<span style="color: #006600; font-style: italic;">// 1.判断select选项中 是否存在Value=&quot;paraValue&quot;的Item        </span>
<span style="color: #003366; font-weight: bold;">function</span> jsSelectIsExitItem<span style="color: #009900;">&#40;</span>objSelect<span style="color: #339933;">,</span> objItemValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
    <span style="color: #003366; font-weight: bold;">var</span> isExit <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>        
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> objSelect.<span style="color: #660066;">options</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>objSelect.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> objItemValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
            isExit <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>        
            <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>        
        <span style="color: #009900;">&#125;</span>        
    <span style="color: #009900;">&#125;</span>        
    <span style="color: #000066; font-weight: bold;">return</span> isExit<span style="color: #339933;">;</span>        
<span style="color: #009900;">&#125;</span>         
&nbsp;
<span style="color: #006600; font-style: italic;">// 2.向select选项中 加入一个Item        </span>
<span style="color: #003366; font-weight: bold;">function</span> jsAddItemToSelect<span style="color: #009900;">&#40;</span>objSelect<span style="color: #339933;">,</span> objItemText<span style="color: #339933;">,</span> objItemValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
    <span style="color: #006600; font-style: italic;">//判断是否存在        </span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jsSelectIsExitItem<span style="color: #009900;">&#40;</span>objSelect<span style="color: #339933;">,</span> objItemValue<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;该Item的Value值已经存在&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #003366; font-weight: bold;">var</span> varItem <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Option<span style="color: #009900;">&#40;</span>objItemText<span style="color: #339933;">,</span> objItemValue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>      
        objSelect.<span style="color: #660066;">options</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span>varItem<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>     
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;成功加入&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>     
    <span style="color: #009900;">&#125;</span>        
<span style="color: #009900;">&#125;</span>        
&nbsp;
<span style="color: #006600; font-style: italic;">// 3.从select选项中 删除一个Item        </span>
<span style="color: #003366; font-weight: bold;">function</span> jsRemoveItemFromSelect<span style="color: #009900;">&#40;</span>objSelect<span style="color: #339933;">,</span> objItemValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
    <span style="color: #006600; font-style: italic;">//判断是否存在        </span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jsSelectIsExitItem<span style="color: #009900;">&#40;</span>objSelect<span style="color: #339933;">,</span> objItemValue<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> objSelect.<span style="color: #660066;">options</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>objSelect.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> objItemValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
                objSelect.<span style="color: #660066;">options</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
                <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>        
            <span style="color: #009900;">&#125;</span>        
        <span style="color: #009900;">&#125;</span>        
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;成功删除&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;该select中 不存在该项&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
    <span style="color: #009900;">&#125;</span>        
<span style="color: #009900;">&#125;</span>    
&nbsp;
&nbsp;
<span style="color: #006600; font-style: italic;">// 4.删除select中选中的项    </span>
<span style="color: #003366; font-weight: bold;">function</span> jsRemoveSelectedItemFromSelect<span style="color: #009900;">&#40;</span>objSelect<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
    <span style="color: #003366; font-weight: bold;">var</span> length <span style="color: #339933;">=</span> objSelect.<span style="color: #660066;">options</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>    
    <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> length<span style="color: #339933;">;</span> i <span style="color: #339933;">&gt;=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>    
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>objSelect<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">selected</span> <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>    
            objSelect.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>    
        <span style="color: #009900;">&#125;</span>    
    <span style="color: #009900;">&#125;</span>    
<span style="color: #009900;">&#125;</span>      
&nbsp;
<span style="color: #006600; font-style: italic;">// 5.修改select选项中 value=&quot;paraValue&quot;的text为&quot;paraText&quot;        </span>
<span style="color: #003366; font-weight: bold;">function</span> jsUpdateItemToSelect<span style="color: #009900;">&#40;</span>objSelect<span style="color: #339933;">,</span> objItemText<span style="color: #339933;">,</span> objItemValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
    <span style="color: #006600; font-style: italic;">//判断是否存在        </span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jsSelectIsExitItem<span style="color: #009900;">&#40;</span>objSelect<span style="color: #339933;">,</span> objItemValue<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> objSelect.<span style="color: #660066;">options</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>objSelect.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> objItemValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
                objSelect.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">text</span> <span style="color: #339933;">=</span> objItemText<span style="color: #339933;">;</span>        
                <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>        
            <span style="color: #009900;">&#125;</span>        
        <span style="color: #009900;">&#125;</span>        
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;成功修改&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;该select中 不存在该项&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
    <span style="color: #009900;">&#125;</span>        
<span style="color: #009900;">&#125;</span>        
&nbsp;
<span style="color: #006600; font-style: italic;">// 6.设置select中text=&quot;paraText&quot;的第一个Item为选中        </span>
<span style="color: #003366; font-weight: bold;">function</span> jsSelectItemByValue<span style="color: #009900;">&#40;</span>objSelect<span style="color: #339933;">,</span> objItemText<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>            
    <span style="color: #006600; font-style: italic;">//判断是否存在        </span>
    <span style="color: #003366; font-weight: bold;">var</span> isExit <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>        
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> objSelect.<span style="color: #660066;">options</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>objSelect.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">text</span> <span style="color: #339933;">==</span> objItemText<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
            objSelect.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">selected</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>        
            isExit <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>        
            <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>        
        <span style="color: #009900;">&#125;</span>        
    <span style="color: #009900;">&#125;</span>              
    <span style="color: #006600; font-style: italic;">//Show出结果        </span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isExit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;成功选中&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>        
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;该select中 不存在该项&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
    <span style="color: #009900;">&#125;</span>        
<span style="color: #009900;">&#125;</span>        
&nbsp;
<span style="color: #006600; font-style: italic;">// 7.设置select中value=&quot;paraValue&quot;的Item为选中    </span>
document.<span style="color: #660066;">all</span>.<span style="color: #660066;">objSelect</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> objItemValue<span style="color: #339933;">;</span>    
&nbsp;
<span style="color: #006600; font-style: italic;">// 8.得到select的当前选中项的value    </span>
<span style="color: #003366; font-weight: bold;">var</span> currSelectValue <span style="color: #339933;">=</span> document.<span style="color: #660066;">all</span>.<span style="color: #660066;">objSelect</span>.<span style="color: #660066;">value</span><span style="color: #339933;">;</span>    
&nbsp;
<span style="color: #006600; font-style: italic;">// 9.得到select的当前选中项的text    </span>
<span style="color: #003366; font-weight: bold;">var</span> currSelectText <span style="color: #339933;">=</span> document.<span style="color: #660066;">all</span>.<span style="color: #660066;">objSelect</span>.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>document.<span style="color: #660066;">all</span>.<span style="color: #660066;">objSelect</span>.<span style="color: #660066;">selectedIndex</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">text</span><span style="color: #339933;">;</span>    
&nbsp;
<span style="color: #006600; font-style: italic;">// 10.得到select的当前选中项的Index    </span>
<span style="color: #003366; font-weight: bold;">var</span> currSelectIndex <span style="color: #339933;">=</span> document.<span style="color: #660066;">all</span>.<span style="color: #660066;">objSelect</span>.<span style="color: #660066;">selectedIndex</span><span style="color: #339933;">;</span>    
&nbsp;
<span style="color: #006600; font-style: italic;">// 11.清空select的项    </span>
document.<span style="color: #660066;">all</span>.<span style="color: #660066;">objSelect</span>.<span style="color: #660066;">options</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3  class="related_post_title">随机文章</h3><ul class="related_post"><li>2009年06月25日 -- <a href="http://www.havenliu.com/other/44.html" title="也谈谈Google中的色情和低俗信息问题">也谈谈Google中的色情和低俗信息问题</a></li><li>2009年11月23日 -- <a href="http://www.havenliu.com/goodarticle/270.html" title="“赢在中国”点评人给80后年轻人的30个忠告">“赢在中国”点评人给80后年轻人的30个忠告</a></li><li>2009年11月2日 -- <a href="http://www.havenliu.com/java/266.html" title="MySql access denied for user错误">MySql access denied for user错误</a></li><li>2009年11月29日 -- <a href="http://www.havenliu.com/java/275.html" title="MyEclipse 8没有启动画面的问题">MyEclipse 8没有启动画面的问题</a></li><li>2009年10月10日 -- <a href="http://www.havenliu.com/bike/255.html" title="国庆骑行绍兴">国庆骑行绍兴</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/web/181.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让浏览器显示自己网站的图标</title>
		<link>http://www.havenliu.com/web/15.html</link>
		<comments>http://www.havenliu.com/web/15.html#comments</comments>
		<pubDate>Wed, 03 Jun 2009 04:25:17 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[web开发]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[网站图标]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=15</guid>
		<description><![CDATA[现在主流的大站都有自己的网站“头像”，在用户浏览时，浏览器的地址栏最前面就会显示，收藏夹里也会显示，现在大部分浏览器都支持这一功能了，看起来是个 小功能，但在很多时候还是很有用处的，如果你的图标如果做的比较出色，用户从收藏夹或地址栏里就能很快的定位出的网站，第一次浏览你网站的用户说不定还会 因为你的图标而记住你的网站，效果绝对比文字更出色。
要实现这一功能其实很简单，只需要在之间加入&#60;link rel=&#8221;shortcut icon&#8221; href=&#8221;favicon.ico&#8221; type=&#8221;image/x-icon&#8221;&#62;就可以了，favicon.ico应该放在网站的根目录下面，或者其他能顺利读取的地方（网络路径也可 以），favicon.ico文件需要专门的favicon编辑器生成，一般是16*16或8*8的，对于一般的开发人员的来说要生产这个文件还是有点困 难的，这里推荐一个在线favicon生成器，网站是：http://www.chami.com/html-kit/services/favicon/，你只需要上传一张图片就能自动生成好favicon.ico文件，很方面
随机文章2009年07月2日 -- 网络上收集的搞笑签名2009年08月3日 -- Google收录速度加快了2010年09月7日 -- 青海湖骑行之三2009年07月9日 --  2009年第96届环法自行车赛第六站视频2010年09月7日 -- 青海湖骑行之二]]></description>
			<content:encoded><![CDATA[<p>现在主流的大站都有自己的网站“头像”，在用户浏览时，浏览器的地址栏最前面就会显示，收藏夹里也会显示，现在大部分浏览器都支持这一功能了，看起来是个 小功能，但在很多时候还是很有用处的，如果你的图标如果做的比较出色，用户从收藏夹或地址栏里就能很快的定位出的网站，第一次浏览你网站的用户说不定还会 因为你的图标而记住你的网站，效果绝对比文字更出色。</p>
<p>要实现这一功能其实很简单，只需要在之间加入&lt;link rel=&#8221;shortcut icon&#8221; href=&#8221;favicon.ico&#8221; type=&#8221;image/x-icon&#8221;&gt;就可以了，favicon.ico应该放在网站的根目录下面，或者其他能顺利读取的地方（网络路径也可 以），favicon.ico文件需要专门的favicon编辑器生成，一般是16*16或8*8的，对于一般的开发人员的来说要生产这个文件还是有点困 难的，这里推荐一个<a href="http://www.chami.com/html-kit/services/favicon/">在线favicon生成器</a>，网站是：http://www.chami.com/html-kit/services/favicon/，你只需要上传一张图片就能自动生成好favicon.ico文件，很方面</p>
<h3  class="related_post_title">随机文章</h3><ul class="related_post"><li>2010年05月6日 -- <a href="http://www.havenliu.com/mylife/409.html" title="西塘游记">西塘游记</a></li><li>2009年07月7日 -- <a href="http://www.havenliu.com/mylife/119.html" title="回家听来的真实故事">回家听来的真实故事</a></li><li>2009年06月30日 -- <a href="http://www.havenliu.com/goodarticle/74.html" title="惠普前总裁孙振耀指点职业规划（二）">惠普前总裁孙振耀指点职业规划（二）</a></li><li>2009年07月19日 -- <a href="http://www.havenliu.com/bike/152.html" title="2009年第96届环法自行车赛第十一、十二、十三，十四站视频">2009年第96届环法自行车赛第十一、十二、十三，十四站视频</a></li><li>2010年08月26日 -- <a href="http://www.havenliu.com/goodarticle/481.html" title="爆笑三国之张飞流水账">爆笑三国之张飞流水账</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/web/15.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
