<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[OIDN.NET 重庆程序设计 重庆网站建设 程序设计 重庆网站优化]]></title>
<link>http://www.oidn.net/blog/</link>
<description><![CDATA[网站建设|企业协同办公|流程再造|网站优化]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[1shou@163.com(Strive)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>OIDN.NET 重庆程序设计 重庆网站建设 程序设计 重庆网站优化</title> 
	<url>http://www.oidn.net/blog/images/logos.gif</url> 
	<link>http://www.oidn.net/blog/</link> 
	<description>OIDN.NET 重庆程序设计 重庆网站建设 程序设计 重庆网站优化</description> 
</image>

			<item>
			<link>http://www.oidn.net/blog/default.asp?id=284</link>
			<title><![CDATA[一步一步学Flex 3系列(2-2) DataGrid(DataGrid与Form结合示例)]]></title>
			<author>1shou@163.com(林宏学)</author>
			<category><![CDATA[一步一步学FLEX3]]></category>
			<pubDate>Sat,17 May 2008 10:48:29 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=284</guid>	
		<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2">本章我们做一个Flex综合示例，<strong>DataGrid与Form结合示例</strong>，该示例主要用到了前面所讲的基础知识,如果还没有掌握，请看前几篇文章。</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2">功能：</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><font size="2"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">1.<span style="FONT: 7pt &quot;Times New Roman&quot;"><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span></span>添加：在表单上添加的数据在<span lang="EN-US">DataGrid</span>上显示。</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><font size="2"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">2.<span style="FONT: 7pt &quot;Times New Roman&quot;"><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span></span>删除：在<span lang="EN-US">DataGrid</span>上可以直接删除记录。</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><font size="2"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">3.<span style="FONT: 7pt &quot;Times New Roman&quot;"><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span></span>修改：在<span lang="EN-US">DataGrid</span>上选择某条记录后，给<span lang="EN-US">Form</span>赋值，修改表单数据，<span lang="EN-US">DataGrid</span>实时更新。</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2">示例效果如图：</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><a href="http://www.oidn.net/blog/flex3/2/4/1.jpg"><font size="2"></font></a></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2">&nbsp; <img style="WIDTH: 994px; HEIGHT: 619px" height="704" alt="" src="http://www.oidn.net/blog/flex3/2/4/1.jpg" width="1003" /></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2">&nbsp;</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><a href="http://www.oidn.net/blog/flex3/2/4/MyDataGrid.rar"><font size="2">代码下载</font></a><span lang="EN-US"><span style="mso-spacerun: yes"><font size="2">&nbsp;&nbsp; </font></span></span><a href="http://www.oidn.net/blog/flex3/2/4/MyDataGrid.html"><font size="2">示例演示</font></a></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2">说明：</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>1.</span>本示例只是为了演示上面的基本功能，只加入一个不为空验证，未加入其他表单验证。</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>2.</span>本例不跟外部数据交互，与外部数据交互，如外部<span lang="EN-US">XML</span>或数据库在后续教程给出。</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>3.</span>注释已经在代码中给出，在这里就不在重复。有不清楚的地方欢迎给我们留言。</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2">&nbsp;</font></p>]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=283</link>
			<title><![CDATA[一步一步学Flex 3系列(3) 界面布局]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[一步一步学FLEX3]]></category>
			<pubDate>Fri,16 May 2008 19:03:17 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=283</guid>	
		<description><![CDATA[<p><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">FLEX3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">版本发布了，无论从</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">ActionScript3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">还是</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Air</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">都给我们带来了很多的惊喜，全面支持</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">AIR</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、代码重构、内存和性能分析器</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US"> (profilers)</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、高级</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Datagrid</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">组件、</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Web service introspection</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Web</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">服务的内省一系列新特性更是给我们带来了不少惊喜。《一步一步学</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Flex 3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">系列》文章将从</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Flex3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Flex3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的开发。</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US"> </span></p>
<p><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">本文为系列第五篇创建一个基本的FLEX 3应用在本篇内我们将详细认识系列布局控件及其样式.</span></p>
<p><font face="Verdana"><strong><font size="3">容器</font></strong>是Flex的一大特色,跟许多GUI系统特别是面向对象程序中的GUI一样Flex的控件从功能上大致分为两种 容器(主要用于控制布局) 组件(控件,提供GUI实质的功能处理),使用容器分层次管</font><font face="Verdana">理GUI是当前的趋势,Flex也使用了此种方式,主观上我们认为它把我们界面上的组件通过容器进行了分组或分类布局管理</font></p>
<p><font face="Verdana"><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout.jpg" /></a><br />上图为 整个<strong>Flex容器控件体系</strong> 摘自:<strong>Flex第一步-基于ActionScript 3.0和Flex 2应用开发</strong></font></p>
<font face="Verdana">
<p><br /><strong><font size="3">Application 布局控制</font><br /></strong>&nbsp;Application 是一个特殊的容器,位于界面元素层级的根部,它包含了整个程序中的所有元素,因此控制它的布局显示得尤为重要.<br />&nbsp;Application 标签中有三个属性与布局息息相关,分别是:Layout,horizontalAlign,verticalAlign,其中layout起决定作用,另外两个受制于它<br />&nbsp;<br />&nbsp;&nbsp; layout 有三种可选值: absolute vertical horizontal <br />&nbsp;&nbsp;&nbsp;&nbsp; absolute　时 horizontalAlign,verticalAlign 属性均不起作用,界面上的元素均通过 坐标来定位 即前面课程提到的 x y　属性。<br />&nbsp;&nbsp;&nbsp;&nbsp; vertical horizontal　时元素的位置由 horizontalAlign,verticalAlign　这两个属性来控制。<br />&nbsp;&nbsp; 下面看一下三种方式产生的效果图。<br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout1.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout1.jpg" /></a><br /><br /><font color="#ff0000">&nbsp; 当layout=&quot;absolute&quot; 时 未指定 子级元素控件 x y　属性导致界面混乱的情况<br /></font><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout2.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout2.jpg" /></a><br /><br />layout='absolute'的情形 在 子级元素指定了 x y属性后的情况<br /><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout3.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout3.jpg" /></a><br /><br />layout=&quot;horizontal&quot; 的布局情况<br /><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout4.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout4.jpg" /></a><br /><br />layout=&quot;vertical&quot; 时布局情况<br /><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout5.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout5.jpg" /></a><br />layout='vertical' horizontal的情形<br />并且可以看到 horizontalAlign是在水平方向上的对齐方式 verticalAlign是垂直方向上的对齐方式<br /><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout6.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout6.jpg" /></a><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout7.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout7.jpg" /></a><br />如果你熟悉CSS的话,定会对 <font color="#333399"><strong>padding</strong></font>特别熟悉,不错它和CSS中表达的含义相同,即到各个边距的距离</p>
</font>
<p><font face="Verdana"><strong><font size="3">Canvas VBox HBox 局布布局控制</font><br /></strong>Canvas 是我们经常使用的容器,放在 Canvas 中的组件只能用 x y来定位,<br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout8.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout8.jpg" /></a><br /><br />发生重叠的情形<br /><br /></font><font face="Verdana"><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout9.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout9.jpg" /></a><br /><br />&nbsp;&nbsp;&nbsp;&nbsp; <strong>通过上图我们可以看到 包含在 Canvas 容器中的三个按钮发生了重合,因为默认它们的x y 均为 0,上图中亦可看到我们为Canvas 指定的边框样式.</strong></font></p>
<p><font face="Verdana"><strong>VBox HBox 都是Box的子类,和Canvas相比,Box对子级元素采取规则的布局方式<br />VBox采用垂直方式布局 HBox采用水平布局<br /><br /></strong></font><font face="Verdana"><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout10.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout10.jpg" /></a><br />通过上图可以看到按钮的不同排列方式,并且它们的x y属性均已经无效</font></p>
<font face="Verdana">
<p><br /><strong>DividedBox 分割界面<br /></strong><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout11.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout11.jpg" /></a><br />DividedBox继承自Box类,它也有两个子类:HDividedBox和VdividedBox。和Hbox,VBox相似,它们也只是对包含的子级元素的布局方向不同,不过不同的是它多了一个功能,那就是在子级元素之前</p>
<p>增加了一个可以手动的分割块,可以在程序运行时控制附近元素的长宽.</p>
<p><br /><strong><font size="3">窗口布局</font></strong></p>
<p><strong>Panel</strong><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout12.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout12.jpg" /></a><br /><font color="#ff0000"><strong>Panel具有Canvas HBox VBox的所有功能,</strong></font>如果Panel的layout属性值为 absolute则Panel对子级元素的布局方式和Canvas一样<br />当为 horizontal时则相当于 HBox 为vertical时则相当于VBox<br />并且可以为 Panel指定标题.</p>
<p><strong>TitleWindow<br /></strong><font color="#0000ff"><strong>TitleWindow继承自Panel,与Panel相比,它只多了一个对象,那就是关闭按钮,通过 TitleWindow close事件触发该按钮的单击事件<br /></strong></font>它并不会自动将TitleWindow本身关闭,而是通过我们为该事件所写的代码决定<br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout13.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout13.jpg" /></a><br /><br />上图我们可以看到该关闭按钮所起的效果则是弹出一对话框<br /><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout14.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout14.jpg" /></a><br />上图我们则实现了TitleWindow关闭(其实是不可见).</p>
<p><strong><font size="3">动态控制对象的布局</font></strong></p>
<p><strong>Tile<br /></strong><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout15.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout15.jpg" /></a><br /><strong><font color="#333399">Tile组件直接继承自Container,它使用起来非常方便, Title标签的 direction属性值为 horizontal其子级元素的布局方向为水平方式</font><font color="#333399">tileWidth 和tileHeight属性用来控制每一个子级对象的长和宽,我们可以看到它的优势在于大批量的相同大小的控件布局.</font></strong></p>
<p><strong>Grid<br /></strong>在Tile容器中我们很难将其子控件大小精确控制每一行的对象个数。使用Grid组件可以解决这个问题<br />Grid组件继承自Box它非常类似于 HTML中的表格由若干行组成,每行包含若干个单元格,每个单元格可以包含其他无素,行必须为GridRow对象 每个单元格必须为GridItem对象.GridRow和</p>
<p>GridItem都继承自HBox,跟HTML中的Table一样,单元格回文诗有以下两个属性colSpan rowSpan　前都为单元格横向格数(跨度)后者则为纵向行数．<br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout16.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout16.jpg" /></a><br />从图中我们对进行的边框样式描绘,很清晰的看到Grid容器的布局功能</p>
<p><font size="3"><strong>导航容器<br /></strong></font><br /><strong>Accordion</strong><br />Accordion是一个可折叠的导航器,它跟我们平常所说的OutLook Bar效果是一样的<br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout17.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout17.jpg" /></a><br /><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout18.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout18.jpg" /></a><br />从上图中我们可以看到Accordion的子级元素均为 容器</p>
<p><strong>ViewStack<br /></strong>ViewStack导航容器由若干重叠在一起的子容器组成,每次只有一个容器是可见的,我们可以通过ActionScript来进行控制或与其它控制类容器联合使用<br /><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US"><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout19.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout19.jpg" /></a></span><br />我们可以看到要想让我们需要的子容器显示出来,我们可以通过两种方式 一种是指定 ViewStack的 selectIndex值 子容器的下标由0开始,另一种是指定 selectChild当然这种情况需要指定子容器的id</p>
<p><strong>TabNavigator</strong><br /><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout20.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout20.jpg" /></a><br />TagNavigator导航容器跟ViewStack差不多，但是其提供了Tab选项卡导航,不需要我们用代码实现子容器的显示.</p>
<p><strong>表单布局<br /></strong><a href="http://www.oidn.net/blog/###zoom"><img onclick="zoom(this, &quot;http://www.oidn.net/blog/flex3/3/layout21.jpg&quot;)" alt="" src="http://www.oidn.net/blog/flex3/3/layout21.jpg" /></a><br />在Html中表单使得前后台交互成为可能,在Flex中提供了一套表单组件,让我们可以方便的构建复杂的表单程序,相关的组件还有 FormItem的FormHeading</p>
<p><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 173%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-bidi-font-size: 16.0pt">结束语</span></span></p>
<p>相信现在各位朋友已经对Flex界面整体有比较清晰的认识了,由于作者水平有限,如果发现问题及与我联系．<br />稍后我们会提供一个 DataGrid较详细的示例文章．</p>
</font>]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=282</link>
			<title><![CDATA[一步一步学Flex 3系列(2-2) 系列简单控件学习]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[一步一步学FLEX3]]></category>
			<pubDate>Wed,14 May 2008 09:57:27 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=282</guid>	
		<description><![CDATA[<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">FLEX3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">版本发布了，无论从</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">ActionScript3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">还是</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Air</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">都给我们带来了很多的惊喜，全面支持</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">AIR</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、代码重构、内存和性能分析器</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US"> (profilers)</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、高级</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Datagrid</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">组件、</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Web service introspection</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Web</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">服务的内省一系列新特性更是给我们带来了不少惊喜。《一步一步学</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Flex 3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">系列》文章将从</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Flex3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">Flex3</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的开发。</span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">
<p>&nbsp;<span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体">本文为系列第四篇创建一个基本的</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana" lang="EN-US">FLEX 3</span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体">应用在本篇内我们将详细认识系列简单入门级控件:button label text checkbox radio.以上这些控件均是GUI开发中入门级控件，故我称它们为简单控件，相对于DataGrid 及 布局控件来说它们确实是简单控件。</font></span></p>
<p style="MARGIN-RIGHT: 0px" dir="ltr"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 173%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">建立项目</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 173%" lang="EN-US"> <br /></span></span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体">&nbsp;&nbsp; 根据前面所学的之识我们创建一个名为SimpleComponents的 Flex 3应用</font></span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体"><br /><img src="http://www.oidn.net/blog/flex3/2/3/sc1.jpg" alt="" /></font></span></p>
<p style="MARGIN-RIGHT: 0px" dir="ltr"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体"><strong>Button控件<br /></strong>&nbsp;&nbsp;&nbsp;首先添加一个 button　控件,由于我们总体采用  layout=&quot;absolute&quot; 绝对定位的布局方式，我们需要为 button　控件指定 x y　属性(代表控件的位置的 x,y　位置)<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc2.jpg" alt="" /><br />以下是运行效果图<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc3.jpg" alt="" /><br />我们可以看到文字的字体字号并不是我们想要的，我们可以为Button指定字体字号样式：将Button fontSize　属性指定为12即达到满意效果。</font></span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体"><br /></font></span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体">&nbsp;&nbsp;&nbsp;Button　控件已经创建完毕，众所周知 Button控件在任何一个Gui内所起的作用并不是仅仅表现出来，而它最重要的功能则是它的单击事件，我们可以看到<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc4.jpg" alt="" />上图中的一些代码提示其中以小闪电符号标识的均为事件，它们分生在控件触发该事件时，事件的触发我们将在后面的文章中有讲解，我们只要知道，click是在Button发生点击(单击)后的事件，也就是说单击了该按钮，就会执行 click中所指定的方法，及其它一些代码。</font></span></p>
<p style="MARGIN-RIGHT: 0px" dir="ltr"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体"><strong>Label控件</strong><br />&nbsp;&nbsp; 接下来添加一个Label控件:<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc5.jpg" alt="" /><br />&nbsp;&nbsp; 我们可以看到，它是通过 text属性展示数据的.下面为它指定 id　属性标识它，因为flex程序只有通过 id来找到相应的控件并对它进行访问。<br /></font></span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face="宋体">&nbsp;&nbsp; 接下来我们为 Button控件编写click事件 :<br /></font></span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><img src="http://www.oidn.net/blog/flex3/2/3/sc6.jpg" alt="" /><br />&nbsp;&nbsp;&nbsp; 可以看到我们在 button的 click事件中书写了 sLabel.text='我要改变你的值'；这样一段代码，它是指 我们在单击 button时 sLabel　控件的 text属性为 &lsquo;我要改变你的值'，看一下运行图<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc7.jpg" alt="" /></span></p>
<span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"></span>
<p style="MARGIN-RIGHT: 0px" dir="ltr"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><strong>Text控件</strong><br />&nbsp;&nbsp;&nbsp; Text控件是供输出数据使用的控件,它与Label控件相当相似,首先创建控件<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc8.jpg" alt="" /><br />&nbsp;&nbsp;&nbsp; Text控件也是通过 text属性进行值存储，当然也可以通过text进行值的指定，接下来我们看看 Text控件与 Label控件的区别,我们同时为 Label控件 Text控件指定 width 为50可见其运行效果图<br /></span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><img src="http://www.oidn.net/blog/flex3/2/3/sc9.jpg" alt="" /><br />由上图可见其最大的区别就是，在数据超过　控件宽度时， Label采取截断省略的方式展现，而Text则采取换行方式展现数据。</span></p>
<p style="MARGIN-RIGHT: 0px" dir="ltr"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><strong>CheckBox控件</strong><br />&nbsp;&nbsp;CheckBox控件它可以包含一个复选标记或者未被选中，在一些需要收集 true/ false数据的地方可以采用它:<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc10.jpg" alt="" /><br />上图集中展现了该控件的特性及常用的触发事件</span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><br /></span></p>
<p style="MARGIN-RIGHT: 0px" dir="ltr"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">RadioButton控件<br />&nbsp;&nbsp;&nbsp;RadioButton主要用在同一属性，具有因定的不同值的情况下，它通过RadioButtonGroup指定选项组，或者通过　groupName　属性指定。<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc11.jpg" alt="" /><br />通过上图可以看到我们通过指定 groupName　属性来设置 sex1 sex2两个 RadioButton成为一组，意味着它们只能选择其中一个选项。<br /><img src="http://www.oidn.net/blog/flex3/2/3/sc12.jpg" alt="" /><br />上图为本节多个简单控件的综合展示。</span></p>
<p style="MARGIN-RIGHT: 0px" dir="ltr"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 173%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-bidi-font-size: 16.0pt">结束语</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 173%; mso-bidi-font-size: 16.0pt" lang="EN-US"> </span></span></p>
<p style="MARGIN-RIGHT: 0px" dir="ltr"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"></span><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">　本章讲解了多个简单控件，它们是所有Flex GUI组件的最基础部分。通过它们我们能够窥视到一些面向对象编程与 XML结合带来的巨大诱惑，　可以看到我们的控件通过 XML描述使得这些控件的使用相当简单。<br />&nbsp;&nbsp; 下节我们直接进入 界面布局， 更多控件我们将在使用过程中进行讲解.</span></p>
</span>]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=281</link>
			<title><![CDATA[EL表达式语言]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[软件开发]]></category>
			<pubDate>Sun,11 May 2008 09:08:07 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=281</guid>	
		<description><![CDATA[基本语法<br/><br/>一、EL简介<br/>&nbsp;&nbsp;1.语法结构<br/>&nbsp;&nbsp;&nbsp;&nbsp;${expression}<br/>&nbsp;&nbsp;2.[]与.运算符<br/>&nbsp;&nbsp;&nbsp;&nbsp;EL 提供.和[]两种运算符来存取数据。<br/>&nbsp;&nbsp;&nbsp;&nbsp;当要存取的属性名称中包含一些特殊字符，如.或?等并非字母或数字的符号，就一定要使用 []。例如：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${user.My-Name}应当改为${user[&#34;My-Name&#34;] }<br/>&nbsp;&nbsp;&nbsp;&nbsp;如果要动态取值时，就可以用[]来做，而.无法做到动态取值。例如：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${sessionScope.user[data]}中data 是一个变量<br/>&nbsp;&nbsp;3.变量<br/>&nbsp;&nbsp;&nbsp;&nbsp;EL存取变量数据的方法很简单，例如：${username}。它的意思是取出某一范围中名称为username的变量。<br/>&nbsp;&nbsp;&nbsp;&nbsp;因为我们并没有指定哪一个范围的username，所以它会依序从Page、Request、Session、Application范围查找。<br/>&nbsp;&nbsp;&nbsp;&nbsp;假如途中找到username，就直接回传，不再继续找下去，但是假如全部的范围都没有找到时，就回传null。<br/>&nbsp;&nbsp;&nbsp;&nbsp;属性范围在EL中的名称<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageScope<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestScope<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SessionScope<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application&nbsp;&nbsp;&nbsp;&nbsp; ApplicationScope<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>二、EL隐含对象<br/>&nbsp;&nbsp;1.与范围有关的隐含对象<br/>&nbsp;&nbsp;与范围有关的EL 隐含对象包含以下四个：pageScope、requestScope、sessionScope 和applicationScope；<br/>&nbsp;&nbsp;它们基本上就和JSP的pageContext、request、session和application一样；<br/>&nbsp;&nbsp;在EL中，这四个隐含对象只能用来取得范围属性值，即getAttribute(String name)，却不能取得其他相关信息。<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;例如：我们要取得session中储存一个属性username的值，可以利用下列方法：<br/>&nbsp;&nbsp;&nbsp;&nbsp;session.getAttribute(&#34;username&#34;) 取得username的值，<br/>&nbsp;&nbsp;在EL中则使用下列方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;${sessionScope.username}<br/><br/>&nbsp;&nbsp;2.与输入有关的隐含对象<br/>&nbsp;&nbsp;与输入有关的隐含对象有两个：param和paramValues，它们是EL中比较特别的隐含对象。<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;例如我们要取得用户的请求参数时，可以利用下列方法：<br/>&nbsp;&nbsp;&nbsp;&nbsp;request.getParameter(String name)<br/>&nbsp;&nbsp;&nbsp;&nbsp;request.getParameterValues(String name)<br/>&nbsp;&nbsp;在EL中则可以使用param和paramValues两者来取得数据。<br/>&nbsp;&nbsp;&nbsp;&nbsp;${param.name}<br/>&nbsp;&nbsp;&nbsp;&nbsp;${paramValues.name}<br/><br/>&nbsp;&nbsp;3.其他隐含对象<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;cookie<br/>&nbsp;&nbsp;JSTL并没有提供设定cookie的动作，<br/>&nbsp;&nbsp;例：要取得cookie中有一个设定名称为userCountry的值，可以使用${cookie.userCountry}来取得它。<br/><br/>&nbsp;&nbsp;header和headerValues<br/>&nbsp;&nbsp;header 储存用户浏览器和服务端用来沟通的数据<br/>&nbsp;&nbsp;例：要取得用户浏览器的版本，可以使用${header[&#34;User-Agent&#34;]}。<br/>&nbsp;&nbsp;另外在鲜少机会下，有可能同一标头名称拥有不同的值，此时必须改为使用headerValues 来取得这些值。<br/><br/>&nbsp;&nbsp;initParam<br/>&nbsp;&nbsp;initParam取得设定web站点的环境参数(Context)<br/>&nbsp;&nbsp;例：一般的方法String userid = (String)application.getInitParameter(&#34;userid&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;可以使用 ${initParam.userid}来取得名称为userid<br/><br/>&nbsp;&nbsp;pageContext<br/>&nbsp;&nbsp;pageContext取得其他有关用户要求或页面的详细信息。<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.request.queryString}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得请求的参数字符串<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.request.requestURL}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得请求的URL，但不包括请求之参数字符串<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.request.contextPath}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务的web application 的名称<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.request.method}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得HTTP 的方法(GET、POST)<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.request.protocol}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得使用的协议(HTTP/1.1、HTTP/1.0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.request.remoteUser}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得用户名称<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.request.remoteAddr }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得用户的IP 地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.session.new}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 判断session 是否为新的<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.session.id}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得session 的ID<br/>&nbsp;&nbsp;&nbsp;&nbsp;${pageContext.servletContext.serverInfo}&nbsp;&nbsp; 取得主机端的服务信息<br/><br/>三、EL运算符<br/>&nbsp;&nbsp;1.算术运算符有五个：+、-、*或$、/或div、%或mod<br/>&nbsp;&nbsp;2.关系运算符有六个：==或eq、!=或ne、&lt;或lt、&gt;或gt、&lt;=或le、&gt;=或ge<br/>&nbsp;&nbsp;3.逻辑运算符有三个：&amp;&amp;或and、||或or、!或not<br/>&nbsp;&nbsp;4.其它运算符有三个：Empty运算符、条件运算符、()运算符<br/>&nbsp;&nbsp;&nbsp;&nbsp;例：${empty param.name}、${A?B:C}、${A*(B+C)}<br/>&nbsp;&nbsp;<br/>四、EL函数(functions)。<br/>&nbsp;&nbsp;语法：ns:function( arg1, arg2, arg3 …. argN)<br/>&nbsp;&nbsp;其中ns为前置名称(prefix)，它必须和taglib 指令的前置名称一置<br/><br/>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br/><br/>补充：<br/><br/>&lt;%@ taglib prefix=&#34;c&#34; uri=&#34;<a href="http://java.sun.com/jstl/core_rt" target="_blank">http://java.sun.com/jstl/core_rt</a>&#34; %&gt;<br/><br/>FOREACH:<br/><br/>&lt;c:forEach items=&#34;${messages}&#34;<br/>var=&#34;item&#34;<br/>begin=&#34;0&#34;<br/>end=&#34;9&#34;<br/>step=&#34;1&#34;<br/>varStatus=&#34;var&#34;&gt;<br/>……<br/>&lt;/c:forEach&gt;<br/><br/> <br/><br/><br/>OUT:<br/><br/>&lt;c:out value=&#34;/${logininfo.username}&#34;/&gt;<br/>c:out&gt;将value 中的内容输出到当前位置，这里也就是把logininfo 对象的<br/>username属性值输出到页面当前位置。<br/>${……}是JSP2.0 中的Expression Language（EL）的语法。它定义了一个表达式，<br/>其中的表达式可以是一个常量（如上），也可以是一个具体的表达语句（如forEach循环体中<br/>的情况）。典型案例如下：<br/>Ø ${logininfo.username}<br/>这表明引用logininfo 对象的username 属性。我们可以通过“.”操作符引<br/>用对象的属性，也可以用“[]”引用对象属性，如${logininfo[username]}<br/>与${logininfo.username}达到了同样的效果。<br/>“[]”引用方式的意义在于，如果属性名中出现了特殊字符，如“.”或者“-”，<br/>此时就必须使用“[]”获取属性值以避免语法上的冲突（系统开发时应尽量避免<br/>这一现象的出现）。<br/>与之等同的JSP Script大致如下：<br/>LoginInfo logininfo =<br/>(LoginInfo)session.getAttribute(“logininfo”);<br/>String username = logininfo.getUsername();<br/>可以看到，EL大大节省了编码量。<br/>这里引出的另外一个问题就是，EL 将从哪里找到logininfo 对象，对于<br/>${logininfo.username}这样的表达式而言，首先会从当前页面中寻找之前是<br/>否定义了变量logininfo，如果没有找到则依次到Request、Session、<br/>Application 范围内寻找，直到找到为止。如果直到最后依然没有找到匹配的<br/>变量，则返回null.<br/>如果我们需要指定变量的寻找范围，可以在EL表达式中指定搜寻范围：<br/>${pageScope.logininfo.username}<br/>${requestScope.logininfo.username}<br/>${sessionScope.logininfo.username}<br/>${applicationScope.logininfo.username}<br/>在Spring 中，所有逻辑处理单元返回的结果数据，都将作为Attribute 被放<br/>置到HttpServletRequest 对象中返回（具体实现可参见Spring 源码中<br/>o&#114;g.springframework.web.servlet.view.InternalResourceView.<br/>exposeModelAsRequestAttributes方法的实现代码），也就是说Spring<br/>MVC 中，结果数据对象默认都是requestScope。因此，在Spring MVC 中，<br/>以下寻址方法应慎用：<br/>${sessionScope.logininfo.username}<br/>${applicationScope.logininfo.username}<br/>Ø ${1＋2}<br/>结果为表达式计算结果，即整数值3。<br/>Ø ${i&gt;1}<br/>如果变量值i&gt;1的话，将返回bool类型true。与上例比较，可以发现EL会自<br/>动根据表达式计算结果返回不同的数据类型。<br/>表达式的写法与java代码中的表达式编写方式大致相同。<br/><br/> <br/><br/>IF / CHOOSE:<br/><br/>&lt;c:if test=&#34;${var.index % 2 == 0}&#34;&gt;<br/>*<br/>&lt;/c:if&gt;<br/>判定条件一般为一个EL表达式。<br/>&lt;c:if&gt;并没有提供else子句，使用的时候可能有些不便，此时我们可以通过&lt;c:choose&gt;<br/>tag来达到类似的目的：<br/>&lt;c:choose&gt;<br/>&lt;c:when test=&#34;${var.index % 2 == 0}&#34;&gt;<br/>*<br/>&lt;/c:when&gt;<br/>&lt;c:otherwise&gt;<br/>!<br/>&lt;/c:otherwise&gt;<br/>&lt;/c:choose&gt;<br/>类似Java 中的switch 语句，&lt;c:choose&gt;提供了复杂判定条件下的简化处理手法。其<br/>中&lt;c:when&gt;子句类似case子句，可以出现多次。上面的代码，在奇数行时输出“*”号，<br/>而偶数行时输出“!”。<br/>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br/><br/>再补充：<br/><br/> 1&nbsp;&nbsp;&nbsp;&nbsp;EL表达式用${}表示,可用在所有的HTML和JSP标签中 作用是代替JSP页面中复杂的JAVA代码.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp; EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话范围内的变量.applicationScope表示应用范围的变量.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp; &lt;%@&nbsp;&nbsp;page isELIgnored=&#34;true&#34;%&gt; 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp; EL语言可显示 逻辑表达式如${true and false}结果是false&nbsp;&nbsp;&nbsp;&nbsp;关系表达式如${5&gt;6} 结果是false&nbsp;&nbsp;&nbsp;&nbsp; 算术表达式如 ${5+5} 结果是10<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp; EL中的变量搜索范围是:page request session application&nbsp;&nbsp; 点运算符(.)和&#34;[ ]&#34;都是表示获取变量的值.区别是[ ]可以显示非词类的变量<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=280</link>
			<title><![CDATA[big dog 美国 Boston Dynamics 公司生产的机器人]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[我的文章]]></category>
			<pubDate>Tue,06 May 2008 10:25:39 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=280</guid>	
		<description><![CDATA[big dog 美国 Boston Dynamics 公司生产的机器人 左看右看像头小牛。<br /><embed height="370" name="ssss" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="480" src="http://vhead.blog.sina.com.cn/player/outer_player.swf?auto=1&amp;vid=12784376&amp;uid=1370067145" allowfullscreen="true" allowscriptaccess="always"></embed>]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=279</link>
			<title><![CDATA[从QQ火炬点亮看可口网络营销的成功！]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[我的文章]]></category>
			<pubDate>Fri,02 May 2008 21:26:47 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=279</guid>	
		<description><![CDATA[今天早上打开QQ,火炬点亮的图片遍地都是.QQ的好友几乎60%都有了.是想可口可乐目前取得良好的成绩<br /><br />今天<strong><a href="http://www.seovv.com/" target="_blank"><font color="#6b6b52">重庆SEO</font></a></strong>邵杰就和大家说说这个&quot;火炬&quot;.<br /><br />目前QQ火炬点亮的活动已经传偏了中国大江两岸，为什么QQ火炬点亮活动会这么受到大家的追捧.<br /><br />可口可乐怎么会想到在奥运之际给QQ火炬点亮赞助？为什么会想到在赞助QQ火炬点亮时使用这种方式，<br /><br />难道就不能用其它QQ最常使用的营销推广方式？ <br /><br />这一切都值得我们好好思考，在这次网络营销活动中可口可乐充分运用了互动性和相关性，<br /><br />使每一位参与者都充分的加入进了这个活动它的营销价值远远超过的往常的弹出窗口以及浮漂广告效果，<br /><br />可以说是所有的QQ用户都争先恐后的争玩QQ火炬点亮奥运精神时不知不觉的将可口可乐牢牢的记在心里。<br /><br /><strong>SEO</strong>也是网络营销中的一个重要环节，我们作为SEO前沿的第一批弄潮儿又该如何的理解和把握网络<br /><br />营销中的消费者心理呢，是否还是继续将我们单一、缺乏互动的关键词优化排名坚守到底呢，<br /><br />这都将是未来SEO优化者即将面临的艰难而又有趣的分水岭。<br /><br />让我们拭目以待网络营销市场上各营销玩家的精彩表现吧。<br />]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=278</link>
			<title><![CDATA[Spring文件资源操作和Web相关工具类盘点(超级有用)]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[软件开发]]></category>
			<pubDate>Mon,28 Apr 2008 16:42:25 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=278</guid>	
		<description><![CDATA[<p>　　<strong>Spring 不但提供了一个功能全面的应用开发框架，本身还拥有众多可以在程序编写时直接使用的工具类，您不但可以在 Spring 应用中使用这些工具类，也可以在其它的应用中使用，这些工具类中的大部分是可以在脱离 Spring 框架时使用的。了解 Spring 中有哪些好用的工具类并在程序编写时适当使用，将有助于提高开发效率、增强代码质量。在这个分为两部分的文章中，我们将从众多的 Spring 工具类中遴选出那些好用的工具类介绍给大家。第 1 部分将介绍与文件资源操作和 Web 相关的工具类。</strong></p>
<p>　　<strong>文件资源操作</strong></p>
<p>　　文件资源的操作是应用程序中常见的功能，如当上传一个文件后将其保存在特定目录下，从指定地址加载一个配置文件等等。我们一般使用 JDK 的 I/O 处理类完成这些操作，但对于一般的应用程序来说，JDK 的这些操作类所提供的方法过于底层，直接使用它们进行文件操作不但程序编写复杂而且容易产生错误。相比于 JDK 的 File，Spring 的 Resource 接口（资源概念的描述接口）抽象层面更高且涵盖面更广，Spring 提供了许多方便易用的资源操作工具类，它们大大降低资源操作的复杂度，同时具有更强的普适性。这些工具类不依赖于 Spring 容器，这意味着您可以在程序中象一般普通类一样使用它们。</p>
<p>　　<strong>加载文件资源</strong></p>
<p>　　Spring 定义了一个 org.springframework.core.io.Resource 接口，Resource 接口是为了统一各种类型不同的资源而定义的，Spring 提供了若干 Resource 接口的实现类，这些实现类可以轻松地加载不同类型的底层资源，并提供了获取文件名、URL 地址以及资源内容的操作方法。</p>
<p>　　<strong>访问文件资源</strong></p>
<p>　　假设有一个文件地位于 Web 应用的类路径下，您可以通过以下方式对这个文件资源进行访问：</p>
<p>　　通过 FileSystemResource 以文件系统绝对路径的方式进行访问；<br />　　通过 ClassPathResource 以类路径的方式进行访问；<br />&nbsp;&nbsp;&nbsp; 　通过 ServletContextResource 以相对于Web应用根目录的方式进行访问。</p>
<p>　　相比于通过 JDK 的 File 类访问文件资源的方式，Spring 的 Resource 实现类无疑提供了更加灵活的操作方式，您可以根据情况选择适合的 Resource 实现类访问资源。下面，我们分别通过 FileSystemResource 和 ClassPathResource 访问同一个文件资源：</p>
<p>清单 1. FileSourceExample<br />package com.baobaotao.io;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import org.springframework.core.io.ClassPathResource;<br />import org.springframework.core.io.FileSystemResource;<br />import org.springframework.core.io.Resource;<br />public class FileSourceExample {<br />public static void main(String[] args) {<br />try {<br />String filePath =<br />&quot;D:/masterSpring/chapter23/webapp/WEB-INF/classes/conf/file1.txt&quot;;<br />// ① 使用系统文件路径方式加载文件<br />Resource res1 = new FileSystemResource(filePath);<br />// ② 使用类路径方式加载文件<br />Resource res2 = new ClassPathResource(&quot;conf/file1.txt&quot;);<br />InputStream ins1 = res1.getInputStream();<br />InputStream ins2 = res2.getInputStream();<br />System.out.println(&quot;res1:&quot;+res1.getFilename());<br />System.out.println(&quot;res2:&quot;+res2.getFilename());<br />} catch (IOException e) {<br />e.printStackTrace();<br />}<br />}<br />} <br />　　在获取资源后，您就可以通过 Resource 接口定义的多个方法访问文件的数据和其它的信息：如您可以通过 getFileName() 获取文件名，通过 getFile() 获取资源对应的 File 对象，通过 getInputStream() 直接获取文件的输入流。此外，您还可以通过 createRelative(String relativePath) 在资源相对地址上创建新的资源。</p>
<p>　　在 Web 应用中，您还可以通过 ServletContextResource 以相对于 Web 应用根目录的方式访问文件资源，如下所示：</p>
<p>＜%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=utf-8&quot; pageEncoding=&quot;utf-8&quot;%＞<br />＜jsp:directive.page import=&quot;org.springframework.<br />web.context.support.ServletContextResource&quot;/＞<br />＜jsp:directive.page import=&quot;org.springframework.core.io.Resource&quot;/＞<br />＜%<br />// ① 注意文件资源地址以相对于 Web 应用根路径的方式表示<br />Resource res3 = new ServletContextResource(application,<br />&quot;/WEB-INF/classes/conf/file1.txt&quot;);<br />out.print(res3.getFilename());<br />%＞ </p>
<p>　　对于位于远程服务器（Web 服务器或 FTP 服务器）的文件资源，您则可以方便地通过 UrlResource 进行访问。</p>
<p>　　为了方便访问不同类型的资源，您必须使用相应的 Resource 实现类，是否可以在不显式使用 Resource 实现类的情况下，仅根据带特殊前缀的资源地址直接加载文件资源呢？Spring 提供了一个 ResourceUtils 工具类，它支持&ldquo;classpath:&rdquo;和&ldquo;file:&rdquo;的地址前缀，它能够从指定的地址加载文件资源，请看下面的例子：</p>
<p>清单 2. ResourceUtilsExample<br />package com.baobaotao.io;<br />import java.io.File;<br />import org.springframework.util.ResourceUtils;<br />public class ResourceUtilsExample {<br />public static void main(String[] args) throws Throwable{<br />File clsFile = ResourceUtils.getFile(&quot;classpath:conf/file1.txt&quot;);<br />System.out.println(clsFile.isFile());<br />String httpFilePath = &quot;file:D:/masterSpring/chapter23/src/conf/file1.txt&quot;;<br />File httpFile = ResourceUtils.getFile(httpFilePath);<br />System.out.println(httpFile.isFile());<br />}<br />} <br />　　ResourceUtils 的 getFile(String resourceLocation) 方法支持带特殊前缀的资源地址，这样，我们就可以在不和 Resource 实现类打交道的情况下使用 Spring 文件资源加载的功能了。</p>
<p>　　<strong>本地化文件资源</strong></p>
<p>　　本地化文件资源是一组通过本地化标识名进行特殊命名的文件，Spring 提供的 LocalizedResourceHelper 允许通过文件资源基名和本地化实体获取匹配的本地化文件资源并以 Resource 对象返回。假设在类路径的 i18n 目录下，拥有一组基名为 message 的本地化文件资源，我们通过以下实例演示获取对应中国大陆和美国的本地化文件资源：</p>
<p>清单 3. LocaleResourceTest<br />package com.baobaotao.io;<br />import java.util.Locale;<br />import org.springframework.core.io.Resource;<br />import org.springframework.core.io.support.LocalizedResourceHelper;<br />public class LocaleResourceTest {<br />public static void main(String[] args) {<br />LocalizedResourceHelper lrHalper = new LocalizedResourceHelper();<br />// ① 获取对应美国的本地化文件资源<br />Resource msg_us = lrHalper.findLocalizedResource(&quot;i18n/message&quot;, &quot;.properties&quot;,<br />Locale.US);<br />// ② 获取对应中国大陆的本地化文件资源<br />Resource msg_cn = lrHalper.findLocalizedResource(&quot;i18n/message&quot;, &quot;.properties&quot;,<br />Locale.CHINA);<br />System.out.println(&quot;fileName(us):&quot;+msg_us.getFilename());<br />System.out.println(&quot;fileName(cn):&quot;+msg_cn.getFilename());<br />}<br />} </p>
<p>　　虽然 JDK 的 java.util.ResourceBundle 类也可以通过相似的方式获取本地化文件资源，但是其返回的是 ResourceBundle 类型的对象。如果您决定统一使用 Spring 的 Resource 接表征文件资源，那么 LocalizedResourceHelper 就是获取文件资源的非常适合的帮助类了。</p>
<p>　　<strong>文件操作</strong></p>
<p>　　在使用各种 Resource 接口的实现类加载文件资源后，经常需要对文件资源进行读取、拷贝、转存等不同类型的操作。您可以通过 Resource 接口所提供了方法完成这些功能，不过在大多数情况下，通过 Spring 为 Resource 所配备的工具类完成文件资源的操作将更加方便。</p>
<p>　　文件内容拷贝</p>
<p>　　第一个我们要认识的是 FileCopyUtils，它提供了许多一步式的静态操作方法，能够将文件内容拷贝到一个目标 byte[]、String 甚至一个输出流或输出文件中。下面的实例展示了 FileCopyUtils 具体使用方法：</p>
<p>清单 4. FileCopyUtilsExample<br />package com.baobaotao.io;<br />import java.io.ByteArrayOutputStream;<br />import java.io.File;<br />import java.io.FileReader;<br />import java.io.OutputStream;<br />import org.springframework.core.io.ClassPathResource;<br />import org.springframework.core.io.Resource;<br />import org.springframework.util.FileCopyUtils;<br />public class FileCopyUtilsExample {<br />public static void main(String[] args) throws Throwable {<br />Resource res = new ClassPathResource(&quot;conf/file1.txt&quot;);<br />// ① 将文件内容拷贝到一个 byte[] 中<br />byte[] fileData = FileCopyUtils.copyToByteArray(res.getFile());<br />// ② 将文件内容拷贝到一个 String 中<br />String fileStr = FileCopyUtils.copyToString(new FileReader(res.getFile()));<br />// ③ 将文件内容拷贝到另一个目标文件<br />FileCopyUtils.copy(res.getFile(),<br />new File(res.getFile().getParent()+ &quot;/file2.txt&quot;));<br />// ④ 将文件内容拷贝到一个输出流中<br />OutputStream os = new ByteArrayOutputStream();<br />FileCopyUtils.copy(res.getInputStream(), os);<br />}<br />} </p>
<p><br />　　往往我们都通过直接操作 InputStream 读取文件的内容，但是流操作的代码是比较底层的，代码的面向对象性并不强。通过 FileCopyUtils 读取和拷贝文件内容易于操作且相当直观。如在 ① 处，我们通过 FileCopyUtils 的 copyToByteArray(File in) 方法就可以直接将文件内容读到一个 byte[] 中；另一个可用的方法是 copyToByteArray(InputStream in)，它将输入流读取到一个 byte[] 中。</p>
<p>　　如果是文本文件，您可能希望将文件内容读取到 String 中，此时您可以使用 copyToString(Reader in) 方法，如 ② 所示。使用 FileReader 对 File 进行封装，或使用 InputStreamReader 对 InputStream 进行封装就可以了。</p>
<p>　　FileCopyUtils 还提供了多个将文件内容拷贝到各种目标对象中的方法，这些方法包括：</p>
<p>　　方法 说明</p>
<p>　　static void copy(byte[] in, File out) 将 byte[] 拷贝到一个文件中</p>
<p>　　static void copy(byte[] in, OutputStream out) 将 byte[] 拷贝到一个输出流中</p>
<p>　　static int copy(File in, File out) 将文件拷贝到另一个文件中</p>
<p>　　static int copy(InputStream in, OutputStream out) 将输入流拷贝到输出流中</p>
<p>　　static int copy(Reader in, Writer out) 将 Reader 读取的内容拷贝到 Writer 指向目标输出中</p>
<p>　　static void copy(String in, Writer out) 将字符串拷贝到一个 Writer 指向的目标中</p>
<p>　　在实例中，我们虽然使用 Resource 加载文件资源，但 FileCopyUtils 本身和 Resource 没有任何关系，您完全可以在基于 JDK I/O API 的程序中使用这个工具类。</p>
<p>　　<strong>属性文件操作</strong></p>
<p>　　我们知道可以通过 java.util.Properties的load(InputStream inStream) 方法从一个输入流中加载属性资源。Spring 提供的 PropertiesLoaderUtils 允许您直接通过基于类路径的文件地址加载属性资源，请看下面的例子：</p>
<p>package com.baobaotao.io;<br />import java.util.Properties;<br />import org.springframework.core.io.support.PropertiesLoaderUtils;<br />public class PropertiesLoaderUtilsExample {<br />public static void main(String[] args) throws Throwable {<br />// ① jdbc.properties 是位于类路径下的文件<br />Properties props = PropertiesLoaderUtils.loadAllProperties(&quot;jdbc.properties&quot;);<br />System.out.println(props.getProperty(&quot;jdbc.driverClassName&quot;));<br />}<br />} </p>
<p>　　一般情况下，应用程序的属性文件都放置在类路径下，所以 PropertiesLoaderUtils 比之于 Properties#load(InputStream inStream) 方法显然具有更强的实用性。此外，PropertiesLoaderUtils 还可以直接从 Resource 对象中加载属性资源：</p>
<p>　　方法 说明</p>
<p>　　static Properties loadProperties(Resource resource) 从 Resource 中加载属性</p>
<p>　　static void fillProperties(Properties props, Resource resource) 将 Resource 中的属性数据添加到一个已经存在的 Properties 对象中</p>
<p>　　<strong>特殊编码的资源</strong></p>
<p>　　当您使用 Resource 实现类加载文件资源时，它默认采用操作系统的编码格式。如果文件资源采用了特殊的编码格式（如 UTF-8），则在读取资源内容时必须事先通过 EncodedResource 指定编码格式，否则将会产生中文乱码的问题。</p>
<p>清单 5. EncodedResourceExample<br />package com.baobaotao.io;<br />import org.springframework.core.io.ClassPathResource;<br />import org.springframework.core.io.Resource;<br />import org.springframework.core.io.support.EncodedResource;<br />import org.springframework.util.FileCopyUtils;<br />public class EncodedResourceExample {<br />public static void main(String[] args) throws Throwable {<br />Resource res = new ClassPathResource(&quot;conf/file1.txt&quot;);<br />// ① 指定文件资源对应的编码格式（UTF-8）<br />EncodedResource encRes = new EncodedResource(res,&quot;UTF-8&quot;);<br />// ② 这样才能正确读取文件的内容，而不会出现乱码<br />String content = FileCopyUtils.copyToString(encRes.getReader());<br />System.out.println(content);<br />}<br />} </p>
<p>　　EncodedResource 拥有一个 getResource() 方法获取 Resource，但该方法返回的是通过构造函数传入的原 Resource 对象，所以必须通过 EncodedResource#getReader() 获取应用编码后的 Reader 对象，然后再通过该 Reader 读取文件的内容。</p>
<p>　　<strong>Web 相关工具类</strong></p>
<p>　　您几乎总是使用 Spring 框架开发 Web 的应用，Spring 为 Web 应用提供了很多有用的工具类，这些工具类可以给您的程序开发带来很多便利。在这节里，我们将逐一介绍这些工具类的使用方法。</p>
<p>　　<strong>操作 Servlet API 的工具类</strong></p>
<p>　　当您在控制器、JSP 页面中想直接访问 Spring 容器时，您必须事先获取 WebApplicationContext 对象。Spring 容器在启动时将 WebApplicationContext 保存在 ServletContext的属性列表中，通过 WebApplicationContextUtils 工具类可以方便地获取 WebApplicationContext 对象。</p>
<p>　　WebApplicationContextUtils</p>
<p>　　当 Web 应用集成 Spring 容器后，代表 Spring 容器的EebApplicationContext 对象将以 </p>
<p>　　WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 为键存放在 ServletContext 属性列表中。您当然可以直接通过以下语句获取 WebApplicationContext：</p>
<p>　　WebApplicationContext wac = (WebApplicationContext)servletContext.</p>
<p>　　getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);</p>
<p>　　但通过位于 org.springframework.web.context.support 包中的WebApplicationContextUtils 工具类获取 WebApplicationContext 更方便：</p>
<p>　　WebApplicationContext wac =WebApplicationContextUtils.</p>
<p>　　getWebApplicationContext(servletContext);</p>
<p>　　当 ServletContext 属性列表中不存在 WebApplicationContext 时，getWebApplicationContext() 方法不会抛出异常，它简单地返回 null。如果后续代码直接访问返回的结果将引发一个 NullPointerException 异常，而 WebApplicationContextUtils 另一个 getRequiredWebApplicationContext(ServletContext sc) 方法要求 ServletContext 属性列表中一定要包含一个有效的 WebApplicationContext 对象，否则马上抛出一个 IllegalStateException 异常。我们推荐使用后者，因为它能提前发现错误的时间，强制开发者搭建好必备的基础设施。</p>
<p>　　<strong>WebUtils</strong></p>
<p>　　位于 org.springframework.web.util 包中的 WebUtils 是一个非常好用的工具类，它对很多 Servlet API 提供了易用的代理方法，降低了访问 Servlet API 的复杂度，可以将其看成是常用 Servlet API 方法的门面类。</p>
<p>　　下面这些方法为访问 HttpServletRequest 和 HttpSession 中的对象和属性带来了方便：</p>
<p>　　方法 说明</p>
<p>　　Cookie getCookie(HttpServletRequest request, String name) 获取 HttpServletRequest 中特定名字的 Cookie 对象。如果您需要创建 Cookie， Spring 也提供了一个方便的 CookieGenerator 工具类；</p>
<p>　　Object getSessionAttribute(HttpServletRequest request, String name) 获取 HttpSession 特定属性名的对象，否则您必须通过request.getHttpSession.getAttribute(name) 完成相同的操作；</p>
<p>　　Object getRequiredSessionAttribute(HttpServletRequest request, String name) 和上一个方法类似，只不过强制要求 HttpSession 中拥有指定的属性，否则抛出异常；</p>
<p>　　String getSessionId(HttpServletRequest request) 获取 Session ID 的值；</p>
<p>　　void exposeRequestAttributes(ServletRequest request, Map attributes) 将 Map 元素添加到 ServletRequest 的属性列表中，当请求被导向（forward）到下一个处理程序时，这些请求属性就可以被访问到了；</p>
<p>　　此外，WebUtils还提供了一些和ServletContext相关的方便方法：</p>
<p>　　方法 说明</p>
<p>　　String getRealPath(ServletContext servletContext, String path) 获取相对路径对应文件系统的真实文件路径；</p>
<p>　　File getTempDir(ServletContext servletContext) 获取 ServletContex 对应的临时文件地址，它以 File 对象的形式返回。</p>
<p>　下面的片断演示了使用 WebUtils 从 HttpSession 中获取属性对象的操作：protected Object formBackingObject(HttpServletRequest request) throws Exception {<br />UserSession userSession = (UserSession) WebUtils.getSessionAttribute(request,<br />&quot;userSession&quot;);<br />if (userSession != null) {<br />return new AccountForm(this.petStore.getAccount(<br />userSession.getAccount().getUsername()));<br />} else {<br />return new AccountForm();<br />}<br />} </p>
<p><br />　　Spring 所提供的过滤器和监听器</p>
<p>　　Spring 为 Web 应用提供了几个过滤器和监听器，在适合的时间使用它们，可以解决一些常见的 Web 应用问题。</p>
<p>　　<strong>延迟加载过滤器</strong></p>
<p>　　Hibernate 允许对关联对象、属性进行延迟加载，但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层，当 Web 层访问到那些需要延迟加载的数据时，由于加载领域对象的 Hibernate Session 已经关闭，这些导致延迟加载数据的访问异常。</p>
<p>　　Spring 为此专门提供了一个 OpenSessionInViewFilter 过滤器，它的主要功能是使每个请求过程绑定一个 Hibernate Session，即使最初的事务已经完成了，也可以在 Web 层进行延迟加载的操作。</p>
<p>　　OpenSessionInViewFilter 过滤器将 Hibernate Session 绑定到请求线程中，它将自动被 Spring 的事务管理器探测到。所以 OpenSessionInViewFilter 适用于 Service 层使用HibernateTransactionManager 或 JtaTransactionManager 进行事务管理的环境，也可以用于非事务只读的数据操作中。</p>
<p>　　要启用这个过滤器，必须在 web.xml 中对此进行配置：</p>
<p>&hellip;<br />＜filter＞<br />＜filter-name＞hibernateFilter＜/filter-name＞<br />＜filter-class＞<br />org.springframework.orm.hibernate3.support.OpenSessionInViewFilter<br />＜/filter-class＞<br />＜/filter＞<br />＜filter-mapping＞<br />＜filter-name＞hibernateFilter＜/filter-name＞<br />＜url-pattern＞*.html＜/url-pattern＞<br />＜/filter-mapping＞<br />&hellip; </p>
<p>　　上面的配置，我们假设使用 .html 的后缀作为 Web 框架的 URL 匹配模式，如果您使用 Struts 等 Web 框架，可以将其改为对应的&ldquo;*.do&rdquo;模型。</p>
<p>　　中文乱码过滤器</p>
<p>　　在您通过表单向服务器提交数据时，一个经典的问题就是中文乱码问题。虽然我们所有的 JSP 文件和页面编码格式都采用 UTF-8，但这个问题还是会出现。解决的办法很简单，我们只需要在 web.xml 中配置一个 Spring 的编码转换过滤器就可以了：</p>
<p>＜web-app＞<br />＜!---listener的配置--＞<br />＜filter＞<br />＜filter-name＞encodingFilter＜/filter-name＞<br />＜filter-class＞<br />org.springframework.web.filter.CharacterEncodingFilter ① Spring 编辑过滤器<br />＜/filter-class＞<br />＜init-param＞ ② 编码方式<br />＜param-name＞encoding＜/param-name＞<br />＜param-value＞UTF-8＜/param-value＞<br />＜/init-param＞<br />＜init-param＞ ③ 强制进行编码转换<br />＜param-name＞forceEncoding＜/param-name＞<br />＜param-value＞true＜/param-value＞<br />＜/init-param＞<br />＜/filter＞<br />＜filter-mapping＞ ② 过滤器的匹配 URL<br />＜filter-name＞encodingFilter＜/filter-name＞<br />＜url-pattern＞*.html＜/url-pattern＞<br />＜/filter-mapping＞<br />＜!---servlet的配置--＞<br />＜/web-app＞ </p>
<p><br />&hellip;<br />＜filter＞<br />＜filter-name＞hibernateFilter＜/filter-name＞<br />＜filter-class＞<br />org.springframework.orm.hibernate3.support.OpenSessionInViewFilter<br />＜/filter-class＞<br />＜/filter＞<br />＜filter-mapping＞<br />＜filter-name＞hibernateFilter＜/filter-name＞<br />＜url-pattern＞*.html＜/url-pattern＞<br />＜/filter-mapping＞<br />&hellip; </p>
<p>　　上面的配置，我们假设使用 .html 的后缀作为 Web 框架的 URL 匹配模式，如果您使用 Struts 等 Web 框架，可以将其改为对应的&ldquo;*.do&rdquo;模型。</p>
<p>　　中文乱码过滤器</p>
<p>　　在您通过表单向服务器提交数据时，一个经典的问题就是中文乱码问题。虽然我们所有的 JSP 文件和页面编码格式都采用 UTF-8，但这个问题还是会出现。解决的办法很简单，我们只需要在 web.xml 中配置一个 Spring 的编码转换过滤器就可以了：</p>
<p>＜web-app＞<br />＜!---listener的配置--＞<br />＜filter＞<br />＜filter-name＞encodingFilter＜/filter-name＞<br />＜filter-class＞<br />org.springframework.web.filter.CharacterEncodingFilter ① Spring 编辑过滤器<br />＜/filter-class＞<br />＜init-param＞ ② 编码方式<br />＜param-name＞encoding＜/param-name＞<br />＜param-value＞UTF-8＜/param-value＞<br />＜/init-param＞<br />＜init-param＞ ③ 强制进行编码转换<br />＜param-name＞forceEncoding＜/param-name＞<br />＜param-value＞true＜/param-value＞<br />＜/init-param＞<br />＜/filter＞<br />＜filter-mapping＞ ② 过滤器的匹配 URL<br />＜filter-name＞encodingFilter＜/filter-name＞<br />＜url-pattern＞*.html＜/url-pattern＞<br />＜/filter-mapping＞<br />＜!---servlet的配置--＞<br />＜/web-app＞ </p>
<p>&nbsp;</p>
<p>　　这样所有以 .html 为后缀的 URL 请求的数据都会被转码为 UTF-8 编码格式，表单中文乱码的问题就可以解决了。</p>
<p>　　请求跟踪日志过滤器</p>
<p>　　除了以上两个常用的过滤器外，还有两个在程序调试时可能会用到的请求日志跟踪过滤器，它们会将请求的一些重要信息记录到日志中，方便程序的调试。这两个日志过滤器只有在日志级别为 DEBUG 时才会起作用：</p>
<p>　　方法 说明</p>
<p>　　org.springframework.web.filter.ServletContextRequestLoggingFilter 该过滤器将请求的 URI 记录到 Common 日志中（如通过 Log4J 指定的日志文件）；</p>
<p>　　org.springframework.web.filter.ServletContextRequestLoggingFilter 该过滤器将请求的 URI 记录到 ServletContext 日志中。</p>
<p>　　以下是日志过滤器记录的请求跟踪日志的片断：</p>
<p>(JspServlet.java:224) - JspEngine --&gt; /htmlTest.jsp<br />(JspServlet.java:225) - ServletPath: /htmlTest.jsp<br />(JspServlet.java:226) - PathInfo: null<br />(JspServlet.java:227) - RealPath: D:masterSpringchapter23webapphtmlTest.jsp<br />(JspServlet.java:228) - RequestURI: /baobaotao/htmlTest.jsp<br />&hellip; </p>
<p>　　通过这个请求跟踪日志，程度调试者可以详细地查看到有哪些请求被调用，请求的参数是什么，请求是否正确返回等信息。虽然这两个请求跟踪日志过滤器一般在程序调试时使用，但是即使程序部署不将其从 web.xml 中移除也不会有大碍，因为只要将日志级别设置为 DEBUG 以上级别，它们就不会输出请求跟踪日志信息了。</p>
<p>　　转存 Web 应用根目录监听器和 Log4J 监听器</p>
<p>　　Spring 在 org.springframework.web.util 包中提供了几个特殊用途的 Servlet 监听器，正确地使用它们可以完成一些特定需求的功能。比如某些第三方工具支持通过 ${key} 的方式引用系统参数（即可以通过 System.getProperty() 获取的属性），WebAppRootListener 可以将 Web 应用根目录添加到系统参数中，对应的属性名可以通过名为&ldquo;webAppRootKey&rdquo;的 Servlet 上下文参数指定，默认为&ldquo;webapp.root&rdquo;。下面是该监听器的具体的配置：</p>
<p>&nbsp;</p>
<p>　　清单 6. WebAppRootListener 监听器配置</p>
<p>　　&hellip;</p>
<p>　　＜context-param＞</p>
<p>　　＜param-name＞webAppRootKey＜/param-name＞</p>
<p>　　＜param-value＞baobaotao.root＜/param-value＞ ① Web 应用根目录以该属性名添加到系统参数中</p>
<p>　　＜/context-param＞</p>
<p>　　&hellip;</p>
<p>　　② 负责将 Web 应用根目录以 webAppRootKey 上下文参数指定的属性名添加到系统参数中</p>
<p>　　＜listener＞</p>
<p>　　＜listener-class＞</p>
<p>　　org.springframework.web.util.WebAppRootListener</p>
<p>　　＜/listener-class＞</p>
<p>　　＜/listener＞</p>
<p>　　&hellip;</p>
<p>　　这样，您就可以在程序中通过 System.getProperty(&quot;baobaotao.root&quot;) 获取 Web 应用的根目录了。不过更常见的使用场景是在第三方工具的配置文件中通过${baobaotao.root} 引用 Web 应用的根目录。比如以下的 log4j.properties 配置文件就通过 ${baobaotao.root} 设置了日志文件的地址：</p>
<p>log4j.rootLogger=INFO,R<br />log4j.appender.R=org.apache.log4j.RollingFileAppender<br />log4j.appender.R.File=${baobaotao.root}/WEB-INF/logs/log4j.log ① 指定日志文件的地址<br />log4j.appender.R.MaxFileSize=100KB<br />log4j.appender.R.MaxBackupIndex=1<br />log4j.appender.R.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n </p>
<p>　　另一个专门用于 Log4J 的监听器是 Log4jConfigListener。一般情况下，您必须将 Log4J 日志配置文件以 log4j.properties 为文件名并保存在类路径下。Log4jConfigListener 允许您通过 log4jConfigLocation Servlet 上下文参数显式指定 Log4J 配置文件的地址，如下所示：</p>
<p>① 指定 Log4J 配置文件的地址<br />＜context-param＞<br />＜param-name＞log4jConfigLocation＜/param-name＞<br />＜param-value＞/WEB-INF/log4j.properties＜/param-value＞<br />＜/context-param＞<br />&hellip;<br />② 使用该监听器初始化 Log4J 日志引擎<br />＜listener＞<br />＜listener-class＞<br />org.springframework.web.util.Log4jConfigListener<br />＜/listener-class＞<br />＜/listener＞<br />&hellip; </p>
<p><br />　　提示</p>
<p>　　一些Web应用服务器（如 Tomcat）不会为不同的Web应用使用独立的系统参数，也就是说，应用服务器上所有的 Web 应用都共享同一个系统参数对象。这时，您必须通过webAppRootKey 上下文参数为不同Web应用指定不同的属性名：如第一个 Web 应用使用 webapp1.root 而第二个 Web 应用使用 webapp2.root 等，这样才不会发生后者覆盖前者的问题。此外，WebAppRootListener 和 Log4jConfigListener 都只能应用在 Web 应用部署后 WAR 文件会解包的 Web 应用服务器上。一些 Web 应用服务器不会将Web 应用的 WAR 文件解包，整个 Web 应用以一个 WAR 包的方式存在（如 Weblogic），此时因为无法指定对应文件系统的 Web 应用根目录，使用这两个监听器将会发生问题。</p>
<p>　　Log4jConfigListener 监听器包括了 WebAppRootListener 的功能，也就是说，Log4jConfigListener 会自动完成将 Web 应用根目录以 webAppRootKey 上下文参数指定的属性名添加到系统参数中，所以当您使用 Log4jConfigListener 后，就没有必须再使用 WebAppRootListener了。</p>
<p>　　Introspector 缓存清除监听器</p>
<p>　　Spring 还提供了一个名为 </p>
<p>　　org.springframework.web.util.IntrospectorCleanupListener 的监听器。它主要负责处理由 JavaBean Introspector 功能而引起的缓存泄露。IntrospectorCleanupListener 监听器在 Web 应用关闭的时会负责清除 JavaBean Introspector 的缓存，在 web.xml 中注册这个监听器可以保证在 Web 应用关闭的时候释放与其相关的 ClassLoader 的缓存和类引用。如果您使用了 JavaBean Introspector 分析应用中的类，Introspector 缓存会保留这些类的引用，结果在应用关闭的时候，这些类以及Web 应用相关的 ClassLoader 不能被垃圾回收。不幸的是，清除 Introspector 的唯一方式是刷新整个缓存，这是因为没法准确判断哪些是属于本 Web 应用的引用对象，哪些是属于其它 Web 应用的引用对象。所以删除被缓存的 Introspection 会导致将整个 JVM 所有应用的 Introspection 都删掉。需要注意的是，Spring 托管的 Bean 不需要使用这个监听器，因为 Spring 的 Introspection 所使用的缓存在分析完一个类之后会马上从 javaBean Introspector 缓存中清除掉，并将缓存保存在应用程序特定的 ClassLoader 中，所以它们一般不会导致内存资源泄露。但是一些类库和框架往往会产生这个问题。例如 Struts 和 Quartz 的 Introspector 的内存泄漏会导致整个的 Web 应用的 ClassLoader 不能进行垃圾回收。在 Web 应用关闭之后，您还会看到此应用的所有静态类引用，这个错误当然不是由这个类自身引起的。解决这个问题的方法很简单，您仅需在 web.xml 中配置 IntrospectorCleanupListener 监听器就可以了：</p>
<p>＜listener＞<br />＜listener-class＞<br />org.springframework.web.util.IntrospectorCleanupListener<br />＜/listener-class＞<br />＜/listener＞ </p>
<p>　　小结</p>
<p>　　本文介绍了一些常用的 Spring 工具类，其中大部分 Spring 工具类不但可以在基于 Spring 的应用中使用，还可以在其它的应用中使用。使用 JDK 的文件操作类在访问类路径相关、Web 上下文相关的文件资源时，往往显得拖泥带水、拐弯抹角，Spring 的 Resource 实现类使这些工作变得轻松了许多。</p>
<p>　　在 Web 应用中，有时你希望直接访问 Spring 容器，获取容器中的 Bean，这时使用 WebApplicationContextUtils 工具类从 ServletContext 中获取 WebApplicationContext 是非常方便的。WebUtils 为访问 Servlet API 提供了一套便捷的代理方法，您可以通过 WebUtils 更好的访问 HttpSession 或 ServletContext 的信息。</p>
<p>　　Spring 提供了几个 Servlet 过滤器和监听器，其中 ServletContextRequestLoggingFilter 和 ServletContextRequestLoggingFilter 可以记录请求访问的跟踪日志，你可以在程序调试时使用它们获取请求调用的详细信息。WebAppRootListener 可以将 Web 应用的根目录以特定属性名添加到系统参数中，以便第三方工具类通过 ${key} 的方式进行访问。Log4jConfigListener 允许你指定 Log4J 日志配置文件的地址，且可以在配置文件中通过 ${key} 的方式引用 Web 应用根目录，如果你需要在 Web 应用相关的目录创建日志文件，使用 Log4jConfigListener 可以很容易地达到这一目标。</p>
<p>　　Web 应用的内存泄漏是最让开发者头疼的问题，虽然不正确的程序编写可能是这一问题的根源，也有可能是一些第三方框架的 JavaBean Introspector 缓存得不到清除而导致的，Spring 专门为解决这一问题配备了 IntrospectorCleanupListener 监听器，它只要简单在 web.xml 中声明该监听器就可以了。<br /></p>]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=277</link>
			<title><![CDATA[JAVA 得到 路径总结]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[软件开发]]></category>
			<pubDate>Mon,28 Apr 2008 14:56:25 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=277</guid>	
		<description><![CDATA[归纳一些网上取JAVA路径的方法：<br /><br />注明：如果从ANT启动程序，this.getClass().getResource(&quot;&quot;)取出来的比较怪，直接用JAVA命令行调试就可成功。<br /><br />得到classpath和当前类的绝对路径的一些方法<br /><br />获得CLASSPATH之外路径的方法：<br /><br />　　URL base = this.getClass（）.getResource（&quot;&quot;）； //先获得本类的所在位置，如/home/popeye/testjava/build/classes/net/ String path = new File（base.getFile（）， &quot;&hellip;&hellip;/&hellip;&hellip;/&hellip;&hellip;/&quot;+name）.getCanonicalPath（）； //就可以得到/home/popeye/testjava/name<br /><br />下面是一些得到classpath和当前类的绝对路径的一些方法。你可能需要使用其中的一些方法来得到你需要的资源的绝对路径。<br /><br />1.FileTest.class.getResource（&quot;&quot;）<br /><br />得到的是当前类FileTest.class文件的URI目录。不包括自己！<br /><br />如：file：/D：/java/eclipse32/workspace/jbpmtest3/bin/com/test/<br /><br />2.FileTest.class.getResource（&quot;/&quot;）<br /><br />得到的是当前的classpath的绝对URI路径。<br /><br />如：file：/D：/java/eclipse32/workspace/jbpmtest3/bin/<br /><br />3.Thread.currentThread（）.getContextClassLoader（）.getResource（&quot;&quot;）<br /><br />得到的也是当前ClassPath的绝对URI路径。<br /><br />如：file：/D：/java/eclipse32/workspace/jbpmtest3/bin/<br /><br />4.FileTest.class.getClassLoader（）.getResource（&quot;&quot;）<br /><br />得到的也是当前ClassPath的绝对URI路径。<br /><br />如：file：/D：/java/eclipse32/workspace/jbpmtest3/bin/<br /><br />5.ClassLoader.getSystemResource（&quot;&quot;）<br /><br />得到的也是当前ClassPath的绝对URI路径。<br /><br />如：file：/D：/java/eclipse32/workspace/jbpmtest3/bin/<br /><br />我推荐使用Thread.currentThread（）.getContextClassLoader（）.getResource（&quot;&quot;）来得到当前的classpath的绝对路径的URI表示法。<br /><br />在Web应用程序中，我们一般通过ServletContext.getRealPath（&quot;/&quot;）方法得到Web应用程序的根目录的绝对路径。这样，我们只需要提供相对于Web应用程序根目录的路径，就可以构建出定位资源的绝对路径。<br /><br />注意点：<br /><br />1.尽量不要使用相对于System.getProperty（&quot;user.dir&quot;）当前用户目录的相对路径。这是一颗定时炸弹，随时可能要你的命。<br /><br />2.尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI，URL，File对象。<br /><br />3.尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面ClassLoaderUtil类的public static URL getExtendResource（String relativePath）方法已经能够使用相对于classpath的相对路径定位所有位置的资源。<br /><br />4.绝对不要使用硬编码的绝对路径。因为，我们完全可以使用ClassLoader类的getResource（&quot;&quot;）方法得到当前classpath的绝对路径。<br /><br />使用硬编码的绝对路径是完全没有必要的！它一定会让你死的很难看！程序将无法移植！<br /><br />如果你一定要指定一个绝对路径，那么使用配置文件，也比硬编码要好得多！<br /><br />当然，我还是推荐你使用程序得到classpath的绝对路径来拼资源的绝对路径]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=275</link>
			<title><![CDATA[程序移除Word文档　页眉页脚水印]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[软件开发]]></category>
			<pubDate>Sun,20 Apr 2008 16:54:04 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=275</guid>	
		<description><![CDATA[<p>昨天遇到一批Word文档,均有页眉页脚背景水印,于是乎在网上搜索<br />居然没有找到解决方案,后来通过实践得到用VB程序删除页眉页脚水印背景的一段代码。</p>
<p>以下是本人朋友　徐泽俊　实现的<strong>删除页眉页脚水印背景</strong>的代码。供有需求者使用哦。</p>
<p>Private Function wordcl(ByVal DocPath As String, Optional SaveAsPath As String)<br />&nbsp;&nbsp;&nbsp; On Error Resume Next<br />&nbsp;&nbsp;&nbsp; Dim t As New Application<br />&nbsp;&nbsp;&nbsp; Dim doc As Document<br />&nbsp;&nbsp;&nbsp; Set doc = t.Documents.Open(DocPath, , False)<br />&nbsp;&nbsp;&nbsp; t.Visible = False</p>
<p>&nbsp;&nbsp;&nbsp; t.ActiveDocument.Sections(1).Range.Select<br />&nbsp;&nbsp;&nbsp; t.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader<br />&nbsp;&nbsp;&nbsp; t.Selection.HeaderFooter.Shapes(&quot;PowerPlusWaterMarkObject1&quot;).Select<br />&nbsp;&nbsp;&nbsp; t.Selection.Delete<br />&nbsp;&nbsp;&nbsp; t.ActiveDocument.Sections(1).Footers(1).Range.Delete<br />&nbsp;&nbsp;&nbsp; t.ActiveDocument.Sections(1).Headers(1).Range.Delete<br />&nbsp;&nbsp;&nbsp; t.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument</p>
<p>&nbsp;&nbsp;&nbsp; If Len(SaveAsPath) = 0 Then doc.Save<br />&nbsp;&nbsp;&nbsp; If Len(SaveAsPath) &lt;&gt; 0 Then doc.SaveAs SaveAsPath</p>
<p>&nbsp;&nbsp;&nbsp; doc.Close</p>
<p>&nbsp;&nbsp;&nbsp; t.Quit<br />&nbsp;&nbsp;&nbsp; Set doc = Nothing<br />&nbsp;&nbsp;&nbsp; Set t = Nothing<br />&nbsp;&nbsp;&nbsp; <br />&nbsp; If List1.ListCount Then<br />&nbsp; List1.RemoveItem (List1.ListCount - 1)<br />&nbsp; Command1_Click<br />&nbsp; End If<br />End Function</p>
<p>你如果连程序都不想写，　那么就　<font size="5"><strong><a href="http://www.oidn.net/blog/soft/DOC_Header_Footer_WaterMark_remove.rar">点击这里吧</a></strong></font>，下载回来就可以用了。<br />如果你　不是想移除页眉页脚的话，　俺也替你找了　一个　<strong>页眉页脚批量添加</strong>的程序哦，<font size="5"><a href="http://www.oidn.net/blog/soft/DOC_Header_Footer_insert.rar">点击下载</a>吧</font>。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.oidn.net/blog/default.asp?id=274</link>
			<title><![CDATA[JavaScript字面量处理 Array 对象]]></title>
			<author>1shou@163.com(刘万林)</author>
			<category><![CDATA[软件开发]]></category>
			<pubDate>Sat,12 Apr 2008 21:43:48 +0800</pubDate>
			<guid>http://www.oidn.net/blog/default.asp?id=274</guid>	
		<description><![CDATA[<div>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">JavaScript的数组和<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">JavaScript</font></span>对象是两个怪异的东东（个人观点，呵呵）。在JavaScript中创建数组和创建对象时，都有两种方法，而且方法相同，一个是用字面量，另一个是使用构造函数。</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3"></font></span>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="5">1、数组的创建</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3"></font></span>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3"><span lang="EN-US"><font face="Calibri"><font size="3">1.1 </font></font></span>采用&ldquo;数组字面量&rdquo;</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><span lang="EN-US"><font face="Calibri"></font></span></font>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><span lang="EN-US"><font face="Calibri">JS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的数组是无类型的，里边可以存放任何类型的数据，如：</span></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3" face="Calibri"><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;var<span style="mso-spacerun: yes">&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">aValues=[&ldquo;string&rdquo;, 24, </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">true</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">, </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">null</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">];</span></font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">这里定义了一个数组字面量，可用如下方式访问：</font></span></p>
<font size="3"><span lang="EN-US"><font face="Calibri"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">
<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-ALIGN: left; mso-para-margin-left: 2.0gd; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">alert(aValues[0]);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">输出字串</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&rdquo;string&rdquo;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> <br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">alert(aValues[1]);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">输出数字</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">24</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> <br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">alert(aValues[2]);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">输出布尔值</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">true</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> <br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">alert(aValues[3]);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">输出</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">null</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">。</span><span lang="EN-US"></span></p>
</span></font></span></font>
<p>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><span lang="EN-US"><font face="Calibri"><font size="3">1.2</font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">、</span></font></span> 如果不想用字面量表示法定义数组，也可以用</span><span lang="EN-US"><font face="Calibri">Array</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的构造函数。如：</span></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"></span></font>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3" face="Calibri"><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">&nbsp;&nbsp; var </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">aValues = </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">new </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">Array(&ldquo;string&rdquo;, 24, </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">true</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">, </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">null</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">);</span></font></span><span lang="EN-US"></span></p>
<p>&nbsp;</p>
<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="5"><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">、</span>对象的创建</font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体"><font size="3"><span lang="EN-US">2.1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">、用对象字面量，</span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">如：</font></span></font></p>
</font></span><span lang="EN-US"><font size="3" face="Calibri">
<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-ALIGN: left; mso-para-margin-left: 2.0gd; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">var </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">oCar = </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">{</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&ldquo;color&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&ldquo;red&rdquo;,<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>&ldquo;doors&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>4,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>&ldquo;paidfor&rdquo;:</span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">true</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">}</span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"></span>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">&nbsp;&nbsp;&nbsp; 这里创建了一个对象，内有三个属性，可用如&ldquo;</span><span lang="EN-US"><font face="Calibri">.</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">&rdquo;号的方式访问对象的属性：</span></font></p>
</font></span><font size="3"><span lang="EN-US"><font face="Calibri">
<p style="MARGIN: 0cm 0cm 0pt 31.5pt; TEXT-ALIGN: left; mso-para-margin-left: 3.0gd; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">alert(oCar.color);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">输出</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&rdquo;red&rdquo;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> <br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">alert(oCar.door);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">输出</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&rdquo;4&rdquo;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">alert(oCar.paidfor);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Courier New'">输出</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">&rdquo;true&rdquo;</span></p>
</font></span></font>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">也可用&ldquo;</span><span lang="EN-US"><font face="Calibri">[&ldquo;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">属性</span><span lang="EN-US"><font face="Calibri">&rdquo;]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">&rdquo;的方式得到属性值，如下：</span></font></p>
<font size="3"><span lang="EN-US"><font face="Calibri">
<p style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-ALIGN: left; mso-para-margin-left: 4.0gd; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">alert(oCar.[&ldquo;color&rdquo;]);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">输出字串</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&rdquo;red&rdquo;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> <br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">alert(oCar.[&ldquo;door&rdquo;]);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">输出字串</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&rdquo;4&rdquo;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"> alert(oCar.[&ldquo;paidfor&rdquo;]);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Courier New'">输出字串</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">&rdquo;true&rdquo;</span><span lang="EN-US"></span></p>
</font></span></font>
<p>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><span lang="EN-US"><font face="Calibri">2.2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">、同样，也可使用</span><span lang="EN-US"><font face="Calibri">JS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的</span><span lang="EN-US"><font face="Calibri">object</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">构造函数来创建一个对象。如下：</span></font></p>
<span lang="EN-US"><font face="Calibri">
<p style="MARGIN: 0cm 0cm 0pt 73.5pt; TEXT-ALIGN: left; mso-para-margin-left: 7.0gd; mso-layout-grid-align: none" class="MsoNormal" align="left"><font size="3"><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">var<span style="mso-spacerun: yes">&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">oCar = </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">new </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">object();</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> <br /></span></font><font size="3"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">oCar.color = &ldquo;red&rdquo;;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> <br /></span></font><font size="3"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">oCar.doors = 4;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span></font><font size="3"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">oCar.paidfor = </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">true</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">;</span></font></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"></span><font size="3">&nbsp;</font></p>
</font></span>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">&nbsp;&nbsp;&nbsp; </font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="5"><span lang="EN-US"><font face="Calibri">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">、数组和</span>对象的混合</font></span></font></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">&nbsp;&nbsp;&nbsp; 这里只能使用混合字面量，来创建&ldquo;对象数组&rdquo;或&ldquo;包含数组的对象&rdquo;。如下：</font></span></p>
<span lang="EN-US">
<p><font size="3" face="Calibri">
<p style="MARGIN: 0cm 0cm 0pt 84pt; TEXT-ALIGN: left; mso-para-margin-left: 8.0gd; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">var </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">oCars =[</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">{<span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&ldquo;color&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&ldquo;red&rdquo;,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;</span>&ldquo;doors&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>2,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp; </span>&ldquo;paidfor&rdquo;:</span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">true</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> </span>
<p>&nbsp;</p>
<span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">}</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"> <br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">{<span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&ldquo;color&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&ldquo;blue&rdquo;,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;</span>&ldquo;doors&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>4,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br />&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&ldquo;paidfor&rdquo;:</span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">true</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">}</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">{<span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&ldquo;color&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&ldquo;white&rdquo;,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br />&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&ldquo;doors&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>2,</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br />&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&ldquo;paidfor&rdquo;:</span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">false</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">}</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">];</span></p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"></span>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">这就是一个对象数组，里面包含了三个对象，访问时形如这样：</font></span></p>
</font></p>
<p>&nbsp;</p>
</span>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt" class="MsoNormal"><font size="3"><span lang="EN-US"><font face="Calibri"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"></span></font></span></font>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt" class="MsoNormal"><font size="3"><span lang="EN-US"><font face="Calibri"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">alert(oCars[1].color);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Courier New'">输出</span><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">&ldquo;blue&rdquo;</span></font></span></font></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt" class="MsoNormal"><font size="3"><span lang="EN-US"><font face="Calibri"><span style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"></span></font></span></font>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">如下是一个包含数组的对象：</font></span></p>
<span lang="EN-US"><font size="3" face="Calibri">
<p style="MARGIN: 0cm 0cm 0pt 84pt; TEXT-ALIGN: left; mso-para-margin-left: 8.0gd; mso-layout-grid-align: none" class="MsoNormal" align="left"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">oCarInfo = </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">{</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&ldquo;availableColors&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>[&ldquo;red&rdquo;,&rdquo;blue&rdquo;,&rdquo;white&rdquo;],</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&ldquo;availableDoors&rdquo;:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>[2,4]</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt" lang="EN-US">&nbsp;<br /></span><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">}</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">;</span></p>
<p style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd" class="MsoNormal"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3">访问时形如：</font></span></p>
</font></span>
<p style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd" class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"><font size="3"></font></span>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt" class="MsoNormal"><font size="3"><span lang="EN-US"><font face="Calibri">alert(oCarsInfo.availableColor [1]);<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">输出&ldquo;</span><span lang="EN-US"><font face="Calibri">blue</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">&rdquo;</span></font></p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt" class="MsoNormal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"></span></font>&nbsp;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt" class="MsoNormal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">**END**</span></font></p>
</div>]]></description>
		</item>
		
</channel>
</rss>