jsf组件 -1

表4-1  JSF包括多个标准UI组件以构建HTML视图。具有相似功能的相关组件被组织成组件族(family)




















































































































































































组件族1



组    件



可能的IDE显示名称



说    明



Column



UIColumn





表格列。用于配置父组件HtmlData- Table组件的模板列



Command



HtmlCommandButton



Command-Button,
Button



表单按钮,它是动作源并可以执行动作方法



HtmlCommandLink



Command-Link,
Link Action



超链接,它是动作源并可以执行动作方法



Data



HtmlDataTable



Data Grid,Data Table



具有可定制的表头、表脚和其他属性的数据感知表格。可以连接到多种类型的数据源



Form



HtmlForm





输入表单;必须用它封装所有输入组件



Graphic



HtmlGraphicImage



Image



基于其URL显示图像



Input



HtmlInputHidden



Hidden Field



类型为“hidden”的输入域



HtmlInputSecret



Secret Field



类型为“password”的输入域



HtmlInputText



Text Field



类型为 “text”的输入域



HtmlInputTextarea



Multi Line Text Area



文本区域(多行输入域)



Message



HtmlMessage



Display Error,
Inline Message



显示针对某个特定组件的消息



Messages



HtmlMessages



Message List



显示所有消息(组件相关或者应用相关的)



Output



HtmlOutputFormat



Formatted Output



输出参数化文本



HtmlOutputLabel



Component Label



输入域的文本标注



HtmlOutputLink



Hyperlink



未关联到用户命令的超链接



HtmlOutputText



Output Text



普通文本,具有可选的CSS格式



UIOutput





普通文本(无格式)。用于封装HTML标记和其他定制标签



Parameter



UIParameter





不可视组件,用于配置其他组件



Panel



HtmlPanelGrid



Grid Panel



具有可定制的表头、表脚和其他属性的表格



HtmlPanelGroup



Panel-Group Box,
Group Box



用于组织组件以便其他组件内部一起使用,并且可以应用公共样式或者显示/隐藏整个一组组件



Select-
Boolean



HtmlSelectBooleanCheckbox



Check Box,Checkbox



单选框



Select-
Item



UISelectItem





表示用于SelectMany 和 SelectOne组件的一个单一选项或者选项组



Select- Items



UISelectItems





表示用于SelectMany和 SelectOne组件中的选项集合(Collection)或者选项组



Select-
Many



HtmlSelectManyCheckbox



Check Box Group



复选框列表的表格,并分为一组



HtmlSelectManyListbox



Multi Select Listbox



允许多项选择的列表框



HtmlSelectManyMenu





同时只显示一个选项的多选列表框



SelectOne



HtmlSelectOneRadio



Radio Button Group



单选按钮列表的表格,分为一组



HtmlSelectOneListbox



Listbox



允许选择单个项目的列表框


     


(续)





























组件族1



组    件



可能的IDE显示名称



说    明


 

HtmlSelectOneMenu



Combo Box,
Dropdown List



允许选择单个选项的下拉列表框



ViewRoot



UIViewRoot





表示包括本页面中所有组件的整个视图



4.1.2  理解facet


如今,已经看过多个父子关系的例子,比如
HtmlInputText组件嵌套在HtmlForm组件中。JSF
也支持命名关系,称为facet。facet没有实际的儿子,但是它们非常相似。它们常用来指定从属元素,比如表头和表脚,所以它们常用在复杂组件中,比
如HtmlPanelGrid 或者 HtmlDataTable。下面就是用于后者的例子:




例子中有三个facet:一个用作表头、一个用作列
头和一个用作表脚。如你所见,<f:facet> 标签定义了关系,但是facet的子组件是实际显示的组件。每个facet
仅可以有一个子组件,所以如果想包括多个组件,它们必须是另一组件的子组件,比如用于封装footer
facet中的其他组件的HtmlPanelGroup。


你将会在我们讨论那些要使用facet的组件时,比如HtmlPanelGrid,看到更多有关facet的例子。现在,我们来看看UI 组件如何同开发工具集成——这也是JSF的一个主要目标。


 

4.2  组件的通用属性


本章所涉及的所有组件都有些通用属性,比如id和value。每次讨论一个具体组件时并未描述这些属性,而是将它们全部列于表4-2中。此时,我们将告诉你该组件支持哪些通用属性。


表4-2  本章所讨论的UI组件的通用属性




























属    性



类    型



默认值



必需?



说    明



id



String







组件标识符



value



Object







组件的本地值。可以是字面值或者值绑定表达式




(续)










































属    性



类    型



默认值



必需?



说    明



rendered



boolean



true





控制组件是否可见



converter



转换器实例(值绑定表达式或者转换器标识符)







设置用于值和显示字符串之间转换的转换器



styleClass



String







CSS样式类的名称。呈现为HTML class属性。可以设置多个类名,用空格分隔



binding



String







值绑定表达式,用来将该组件关联到后台bean属性






UIViewRoot控制页面


代码清单4-1  UIViewRoot必须封装同一页面中的多所有UI组件




UIViewRoot的组件标签暴露的唯一属性是locale,允许你指定当前页面支持的语言。假定想要确保特定的页面总是以西班牙语显示:



使用Output组件显示数据


HtmlOutputText
组件用于显示普通文本,但它也有CSS style属性。为显示没有格式的纯文本,可以使用UIOutput 组件。HtmlOutputLabel
组件用于连接标注到输入控件之上。最后,HtmlOutputMessage组件用于灵活地显示参数化字符串。


4.5.1  使用HtmlOutputText显示普通文本


表4-6  HtmlOutputText示例:默认情况下文本将被转义



















HTML



What are &lt;i&gt;you&lt;/i&gt; looking at?



组件标签



<h:outputText value=”What are <i>you</i> looking at?”/>



浏览器显示



What are <i>you</i> looking at?




如表所示,默认情况下HtmlOutputText的 value 属性中的所有标记都会在浏览器中按字面显示。如果想要让标记直通浏览器,你可以设置escape属性为false,如表4-7所示。


表4-7  HtmlOutputText示例:关闭文本转义



















HTML



What are <i>you</i> looking at?



组件标签



<h:outputText value=”What are <i>you</i> looking at?” escape=”false”/>



浏览器显示



What are you looking at?




在这种情况下,组件的值未被转义,所以它会被浏览器解释。想要使组件的值直通到客户时,你可以关闭转义,但是如果有大量文本需要显示,而又不需要使用样式表和HTML 格式化,你就应该使用我们将下一节所讲的UIOutput组件。



 


















顺便
说说




 

            
如果熟悉JSTL,你可能想知道为什么每个人都愿意使用HtmlOutputText组件而不是JSTL的<c:out>标签。使用
UIOutput允许你使用全部JSF组件模型控件。HtmlOutputText组件是组件树中其他组件的子组件,你可以在服务器端代码中操作其行为。
如果使用像<c:out>之类的无组件支持的标签,则它没有对应的服务器端表示,在效果上,它更像模板文本。但是需要指出的
是,<c:out>是更加轻量的,因为没有创建任何服务器端组件。

HtmlOutputText 主要用于显示简单值(带有可选的CSS 格式),但是它并不显示其body文本(必须使用value属性),并且不能在其body嵌入定制标签。这些则是<f:verbatim>标签提供的特征。


4.5.2  与<f:verbatim>标签一起使用UIOutput


当需要显示无格式的字面文本,或者嵌入其他JSP定制标签到视图中时,你可以使用UIOutput组件和<f:verbatim>标签。表4-8描述了这个组件及其属性。



注解    技术上UIOutput 还有其他属性;本节仅限于组件和<f:verbatim>标签的使用。



你可以从表中看
到,<f:verbatim>组件并未暴露太多的公共UI
组件属性,比如rendered、converter或者binding。如果需要使用这些属性,你最好使用
HtmlOutputText;<f:verbatim>只用来显示其body内容。与HtmlOutputText不同,escape属性
的默认值为false。


表4-8  UIOutput小结

























































组件



UIOutput



组件族



javax.faces.Output



可能的IDE显示名





显示行为



无格式地显示其body 文本,处理所有嵌入的JSP定制标签



标签库



Core



JSP标签



<f:verbatim>



直通属性





属    性



类    型



默认值



必需?



说    明



escape



boolean



false





控制是否进行HTML 或者XML 字符转义(在浏览器中显示字面值)


      


<f:verbatim>的最好用途之一是,转义和显示大块的静态文本。假定想要在页面中显示这段JSF配置文件的内容,则如表4-9所示。


表4-9  UIOutput示例:转义大块的body 文本



















HTML





组件标签





浏览器显示



<application>


   <message-bundle>CustomMessages</message-bundle>


   <locale-config>


     <default-locale>en</default-locale>


     <supported-locale>en</supported-locale>


     <supported-locale>es</supported-locale>


   </locale-config>


</application>




这里,我们将所有字面文本放置在标签的body中,而这是HtmlOutputText所不能完成的。escape属性也被设置为true,以确保所有的XML元素都被正确转义。这个例子获得了正确转义的HTML输出,而不需要手动输入所有已有的HTML 实体。


<f:verbatim>也可用来
封装位于容器组件,比如HtmlPanelGrid和HtmlDataTable,之中的标记和其他标签。因为这些组件需要其所有子组件都是JSF
组件,所以,不能在其中嵌入任意的模板文本和其他定制标签。但是,你却可以使用<f:verbatim> 标签来封装它们。


假定想要输出一个简单的两列表格,左边列显示来自后台bean的列表,而右边列显示正常的HTML文本。后台bean列表中仅有三个条目:www.yahoo.com、www.javalobby.org和www.jsfcentral.com。


你可使用HtmlPanelGrid组件来创建HTML 表格。我们将在本章后面详细讲述它,但是现在仅用它来产生前述的表格。对左边列,我们使用JSTL <c:forEach>标签。而对右边的列,我们仅嵌入字面HTML。该例子示于表4-10中。


表4-10  UIOutput 示例:嵌入定制标签和标记



















HTML





组件标签





浏览器显示






如你所
见,<c:forEach>标签和字面HTML都嵌入<f:verbatim>
标签中。而<f:verbatim> 标签嵌入<h:panelGrid>标签中。仅有JSF
组件标签可以出现在<h:panelGrid>中,所以使用<f:verbatim>使我们可以将JSTL标签和模板文本处理成
JSF组件。另外,请注意escape属性对HTML文本设置为false,因为我们希望它直接被浏览器处理。


UIOutput和HtmlOutputText都可显示简单文本,但是如果你需要将文本关联到输入控件,就必须将它们嵌入HtmlOutputLabel组件中。


4.5.3  使用HtmlOutputLabel创建输入标注


HtmlOutputLabel
组件用来将标注与表单元素相关联——它直接对应于HTML <label>
元素。这使得目标设备能够感知文本如何与屏幕上的控件相关联,以便可以完成像用户点击标注时加亮显示文本域这样的功能。这也是创建可访问应用的要求。该组
件总结在表4-11中。


表4-11  HtmlOutputLabel概要





















































组件



HtmlOutputLabel



组件族



javax.faces.Output



可能的IDE显示名



Component Label



显示行为



显示<label> 元素。通常有HtmlOutputText 和/或其他组件作为其子组件



标签库



Core



JSP标签



<h:outputLabel>



直通属性



针对<label>元素的HTML 属性



公共属性



id、value、rendered、converter、styleClass、binding(见表4-2)



属    性



类    型



默认值



必需?



说    明



for



String







这个标注所关联的组件的标识符




HtmlOutputLabel
组件的for属性是必需的,而且必须关联到输入控件的组件标识符。组件并不实际显示任何文本,它只是呈现为<label>元素(而该元素并无
可视化表示)。为了在该标签内显示内容,必须在其中嵌入另一个UI组件(子组件通常是HtmlOutputText;某些工具在从选项板中拖放添
HtmlOutputLabel组件时,会自动在其中添加HtmlOutputText)。


对HtmlInputText 组件使用HtmlOutputLabel 的例子示于表4-12。


表4-12  HtmlOutputLabel示例:添加标注到HtmlInputLabel组件。



















HTML



 



组件标签



 



浏览器显示






可以看
到,<h:outputLabel> 标签直接对应于<label> 标签,而accesskey 属性是直通的。for
属性则通过组件标识符引用HtmlInputText组件,但是HTML输出时用其客户端标识符(HtmlOutputLabel自动完成这些处理)。所
以这里有个重要问题:无论何时将HtmlOutputLabel关联到输入控件,你必须指定输入控件的组件标识符。否则将不知道何值会用作for属性。


在HTML中,你可以嵌套输入元素到label标签中,而忽略for属性。但在JSF中,你可以嵌套一个输入控件和多个组件到<h:outputLabel> 标签中,但是for属性则是强制的。


现在已经讨论了显示简单字符串(或者值绑定表达式)的组件,我们再来看看添加了格式化能力的组件。


4.5.4  使用HtmlOutputFormat输出参数化文本


HtmlOutputFormat 用来显示参数化文本。换言之,你可以指定特殊的字符串,而组件将在字符串中的特定位置插入值(不管是硬编码的还是值绑定表达式)。你也可以用它来在单个字符串中重复变量而不用重复同一个值绑定表达式。该组件总结在表4-13中。


HtmlOutputFormat 的行为非常相似于HtmlOutputText,除了可以插入任意参数到它显示的字符串中外。


例如,假定你想要向当前用户显示消息、他们的名字、硬编码字符串以及他们的浏览器类型。如果用户名字为Joe,而使用Mozilla浏览器,则输出可能会像这样:



表4-13  HtmlOutputFormat 概要





















































组件



HtmlOutputFormat



组件族



javax.faces.Output



可能的IDE显示名



Formatted Output



显示行为



转换其值为字符串并显示之,用从子UIParameter 组件获得的值替换所有参数。如果指定了id、style或者styleClass属性,则会将值封装到<span>元素中



标签库



HTML



JSP标签



<h:outputFormat>



直通属性



title、style



公共属性



id、value、rendered、converter、styleClass、binding(见表4-2)



属    性



类    型



默认值



必需?



说    明



escape



boolean



false





控制HTML或XML字符是否要被转义(按字面显示在浏览器中)




假设有个JavaBean 保存为关键字user,你可使用HtmlOutputText得到这样的输出:



这很不错,但是你仍然不得不在每次想要显示用户名称时使用表达式”#{user.firstName}” (顺便说一下,header是隐含EL变量,见第3章中的详细信息)。


HtmlOutputFormat通过使用消息
格式模板来简化了用动态变量显示字符串的方式。消息格式模板(message format
pattern)是个特殊字符串,它具有对应于参数值的特殊记号。消息格式元素(不要与XML或HTML元素混淆)是由花括号({})扩起来的参数号组
成。参数则通过嵌入的UIParameter 组件来指定(UIParameter
在4.4节中讨论过)。表4-14展示了如何用HtmlOutputFormat组件而不是HtmlOutputText 组件来产生输出字符串。


表4-14  HtmlOutputFormat示例:简单参数替换



















HTML





组件标签



 



浏览器显示



Hey Mark. This is a static value:hardcoded. Mark, you’re using:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b)
Gecko/20040316.





看<h:outputFormat>标签的value
属性。这是个消息格式模板。像Java一样,参数从0开始计数:{0},{1},{2},依此类推。第一个参数将替换所有消息格式元素{0}的存在点。第
二个参数则替换{1},第3个参数替换{2},以此类推。如果还指定了额外的参数,组件将会忽略它们。但如果指定了过少的参数,它将保留其字面字符串的文
本值(如{1})。



注解  HtmlOutputMessage经常用于参数化本地化的文本。见第6章关于国际化和本地化的详细信息。



你也可能注意到,用
在<h:outputFormat>
标签中的字符串需要使用双引号来产生文本”you’re”,而<h:outputText>
标签中的字符串则只需用单引号。这是HtmlOutputMessage的一个特殊要求:你必须使用双引号来产生单引号。如果你想在显示的字符串中使用花
括号,则也不得不将它们扩在单引号中。



 


















顺便
说说




 

             如果你曾经用过MessageFormat 编写Java代码,则可能注意到HtmlOutputFormat 使用和该类相似的限制和规则。这是因为它在内部使用了MessageFormat类。

1.消息格式元素


在上一节,我们描述了花括号包围的消息格式元素,如
{1}。大多数情况下,这就是你所需知道的。然而,也可以使用不同的语法来格式化每个参数。在参数号后,你可以指定格式类型。在格式类型之后,可以指定样
式或者模式。参数号、格式类型、格式样式或模式之间都由逗号分隔。有两类格式类型:数据类型格式类型(数据、时间和数字)以及选择格式类型。


图4-6显示了两个例子。第一个指定了参数号1、日
期格式类型、中等长度的格式样式,其默认显示格式为“May
10,2003”。第二个例子也是第一个参数的日期格式模式,但是有个日期格式模式,它指定了特殊的日期格式。在这里,其显示结果可能是像
“05.10.03”。



图4-6    消息格式元素可以指定额外的格式类型,每个格式类型都可以有样式或者模式。
样式可以提供对格式化的一些控制,而模式则可提供完全控制


假定你想要用值绑定引用显示一个同时针对名称和日期的字符串。则可以用消息格式模式来格式化日期属性,如表4-15所示。


第一个参数使用通常的消息格式元素语法;第二个则使用扩充语法来进行格式化。如表所示,medium 格式元素针对美国英语显示一个缩写的月份,同时将日和年份显示为数字。对其他语言,实际的结果可能会不同。


表4-15  HtmlOutputFormat示例:对消息格式元素使用扩展语法及特定的格式类型



















HTML





组件标签





浏览器显示



Hey Mark, you were born on Apr 20, 2004.




如果没有指
定日期样式,显示的日期将是“04/20/04 06:04
PM”,这是场所关于Date对象的默认格式。对美国来说,这包括日期和时间;而它也可能与其他场所不同。在某些时候,你可能会听任其默认格式,但是通常
你会希望对其输出施加更多控制。我们将在第6章讨论国际化的时候涉及特殊的消息格式和模式。


2.用可选格式动态显示子字符串


有时,你需要跟据bean的属性来显示字符串的一部
分。例如,假设你想告诉用户其账户余额是否为正,而不是显示账户的实际数值,则可以通过选择格式来做这种事情。选择格式(choice
format)基于数值参数显示多个值中的某一个。比如,在你想要显示一个词的复数形式而不只是单数形式时,就非常有用。与日期类型不同,选择格式没有样
式,它只有模式。


选择格式由一系列比较值/显示字符串对组成。在每对中,比较值和显示字符串以 #号分隔。而比较值/显示字符串之间,则以管道分隔符(|)分隔,它代表或者。这种语法示于图4-7。


选择模式的工作原理类似于case或者switch
语句。其比较数值等于参数的字符串将被显示。如果无比较值等于参数值,则小于参数值并且最接近的比较值所对应的字符串将被显示。如果参数值小于第一个比较
值,第一个显示字符串将被选择。如果大于,则最后一个字符串会被选择。



图4-7    选择格式允许你根据其数值与参数值的比较情况选择显示字符串。这个例子中,如果参数值小于或等于0,或者大于1,将选择字符串”times”。否则(如果参数值等于1),则字符串”time”会被显示


表4-16展示了一个例子。如果user.numberOfTimes 小于1,显示字符串”times”将被选定。如果等于1,字符串”time”被选定。如果大于或等于2,字符串”times”被选定。


表4-16  HtmlOutputFormat示例:使用选择格式来显示复数形式



































HTML(parameter = 0)



You have visited us 0 times.



HTML(parameter = 1)



You have visited us 1 time.



HTML(parameter = 3)



You have visited us 3 times.



组件标签





浏览器显示(parameter = 0)



You have visited us 0 times.



浏览器显示(parameter = 1)



You have visited us 1 time.



浏览器显示(parameter = 3)



You have visited us 3 times.




选择格式对显示复杂字符串来说非常有用,但别忘了值绑定表达式的强大威力。你完全可以在值字符串中(通过选择或者消息格式模式)或者在任何HtmlOutputFormat参数值中使用它们。


4.5.5  使用HtmlOutputLink显示超链接


HtmlOutputLink
组件对应于HTML超链接或者锚,即<a>元素。它可用于链接到一个内部或者外部的URL。组件的value属性表示实际的URL,而任何被
嵌套的组件都将显示在超链接中。如果你的Web容器使用URL重写来维护会话,这个组件将自动重写URL。表4-17总结了该组件的属性。


表4-17  HtmlOutputLink概要







































组件



HtmlOutputLink



组件族



javax.faces.Output



可能的IDE显示名



Hyperlink



显示行为



显示HTML <a> 元素。value 属性被呈现为HTML元素的href 属性,并且其子组件被呈现在<a>元素内



标签库



HTML



JSP标签



<h:outputLink>



直通属性



针对<a>元素的HTML属性



公共属性



id、value、rendered、converter、styleClass、binding(见表4-2)




大多数情况
下,你可能想要嵌套HtmlOutputText 组件到HtmlOutputLink
组件中,以便在超链接中提供文本表示。事实上,某些工具,如Sun的 Java Studio Creator
[Sun,Creator],会自动为你这样做。还有其他一些工具也会允许你从你的Web应用中选择现有的页面,而不必手工输入相对URL(如图
4-8)。



图4-8    WebSphere Application Developer [IBM,WSAD] 允许你通过简单的对话框选择应用中的页面,并设置标注


我们从链接到一个相对图像的超链接开始,如表4-18所示。


表4-18  HtmlOutputLink 示例:到一个图像的简单链接



















HTML



<a href=”images/hello.gif”>Hello image</a>



组件标签





浏览器显示



Hello image



你可以看到,组件的value属性对应于超链接的href值,而超链接中的文本来自于被嵌套的HtmlOut­putText组件。


虽然嵌套HtmlOutputText子组件是实际通用的做法,你也可以嵌套其他组件,比如HtmlGraphicImage 组件,甚至HtmlPanelGrid组件。你还可以在其中嵌套不止一个组件。


实际应用中,你经常需要添加参数到URL中,如表4-19所示。


表4-19  HtmlOutputLink示例:传递URL参数



















HTML





组件标签





浏览器显示



Google Groups - Computers (in French)




你可以看
到,HtmlOutputLink 将自动将嵌套的UIParameter 实例添加到URL参数中。这个例子中,有两个UIParameter
实例被添加到href 属性的末尾。第一个参数告诉Google
显示所有以”comp”打头的新闻组。第二个则告诉它使用法语显示。所以,如果点击这个链接,你将以法语看到所有comp.* 新闻组。


可以对外部页面以这种方式使用HtmlOutputLink,也可以用于自己的应用或者站点中的其他链接。并且请记住,UIParameter与其他大多数JSF 组件一样,都可以使用值绑定表达式,所以其参数可以来自于你的应用中的bean。



 


















顺便
说说




 

            
如果你想知道为什么所有的人都愿意使用HtmlOutputLink而不是常规的HTML<a>元素,我想有两个原因。首先,不能将常规的
HTML 元素放入面板中。所以在开始使用面板来分组组件并进行布局时,你必须使用JSF
组件。其次,使用UIParameter允许你动态配置发送到外部URL的值,这就是说你可以轻易的将它们与后台bean进行同步。

HtmlOutputLink是Output 族组件中的最后一个


4.6  使用HtmlGraphicImage显示图像


大多数UI都具有很多图像,比如代表菜单选项的小图
标、标志(logo),或者其他仅仅用作提醒和装饰的东西。在JSF中,图像是由HtmlGraphicImage
组件处理的,它是指向图片的只读引用。该组件将显示为<img>元素,而后者的src
属性被设置为组件的当前值(由url属性表示),该属性是指向图像URL的静态字符串或者是值绑定表达式。表4-20总结了这个组件。


表4-20  HtmlGraphicImage概要





















































组件



HtmlGraphicImage



组件族



javax.faces.Graphic



可能的IDE显示名



Image



显示行为



显示<img>元素,其src 属性等于组件的url属性。如果必要,将自动重写URL以维护会话



标签库



HTML



JSP标签



<h:graphicImage>



直通属性



针对<img>元素的HTML属性



公共属性



id、value、rendered、styleClass、binding(见表4-2)



属    性



类    型



默认值



必需?



说    明



url



String







将要显示的图像的URL。可以是字面文本或者值绑定表达式(这是value属性的别名)




如果应用使用URL重写来维护会话,HtmlGraphicImage 将自动为你重写URL。另外,如果URL以斜杠(/)开始,它将是相对于Web应用的上下文根。如4-21的示例所示。


表4-21  HtmlGraphicImage 示例:相对于Web应用根的URL



















HTML



 



组件标签





浏览器显示






你可以看到,url属性被呈现为src属性,并且以应用的上下文根作为前缀(无会话被激活,所以URL不被重写)。如果使用相对URL,如”images/logo.gif”,则上下文根不会被加入。其他所有属性都是直通的。


记住HtmlGraphicImage与其他大部分JSF 组件一样,也支持值绑定表达式。这在从中心位置比如在数据库或者XML文件中,维护图像的URL时最为有用。


 


 


 


 


转自:http://blog.csdn.net/liyong1115/archive/2008/02/20/2109757.aspx