<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Java时代，让我们同行]]></title> 
<description><![CDATA[美好的生活需要用心记录]]></description>
<link>http://www.java-time.com/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>
<item>
	<title>第九节：JSF2.0：属性文件、消息和国际化</title>
	<link>http://www.java-time.com/?post=13</link>
	<description><![CDATA[<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">本节主题</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;创建属性文件</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;在<span style="font-family:Consolas;">faces-config.xml</span><span style="font-family:宋体;">中声明属性文件</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;简单消息</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;参数化消息</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;国际化消息</span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span>&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">创建、声明属性文件，使用简单消息</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">后缀名<span style="font-family:Consolas;">.properties</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">内容&nbsp;<span style="font-family:Consolas;">keyName&nbsp;=&nbsp;value</span><span style="font-family:宋体;">，成对出现</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">部署位置：&nbsp;<span style="font-family:Consolas;">WEB-INF/classes</span><span style="font-family:宋体;">或者子目录，如</span><span style="font-family:Consolas;">WEB-INF/classes/resources</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">4、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">在<span style="font-family:Consolas;">faces-config.xml</span><span style="font-family:宋体;">中声明，如：</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;?</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">xml</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;</span><span style="font-family:'Consolas';color:#7f007f;font-size:10.5pt;mso-spacerun:'yes';">version</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">=</span><span style="font-style:italic;font-family:'Consolas';color:#2a00ff;font-size:10.5pt;mso-spacerun:'yes';">"1.0"</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;</span><span style="font-family:'Consolas';color:#7f007f;font-size:10.5pt;mso-spacerun:'yes';">encoding</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">=</span><span style="font-style:italic;font-family:'Consolas';color:#2a00ff;font-size:10.5pt;mso-spacerun:'yes';">"UTF-8"</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">?&gt;</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">faces-config</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">......</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">application</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">resource-bundle</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"> </span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">base-name</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">messages</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">base-name</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;&nbsp;或&nbsp;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">base-name</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">resource.messages</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">base-name</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"> </span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">var</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">msgs</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">var</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">resource-bundle</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">application</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';">faces-config</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&gt;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">可以使用多个属性文件：</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;application&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;resource-bundle&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;base-name&gt;messages1&lt;/base-name&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;var&gt;msgs1&lt;/var&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/resource-bundle&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;resource-bundle&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;base-name&gt;messages2&lt;/base-name&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;var&gt;msgs2&lt;/var&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/resource-bundle&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';">&lt;/application&gt;</span><span style="font-family:'宋体';color:#008080;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">5、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">使用<span style="font-family:Consolas;">EL</span><span style="font-family:宋体;">输出消息</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">#{msgs.keyName}</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">参数化消息</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">属性文件中：<span style="font-family:Consolas;">someName=blah&nbsp;{0}&nbsp;blah&nbsp;{1}</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">使用：</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;h:outputFormat&nbsp;value="#{msgs.someName}"&gt;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;f:param&nbsp;value="Literal&nbsp;value&nbsp;for&nbsp;0th&nbsp;entry"/&gt; --<span style="font-family:宋体;">给</span><span style="font-family:Consolas;">{0}</span><span style="font-family:宋体;">赋值</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;f:param&nbsp;value="#{someBean.calculatedValForEnty1}"/&gt; --<span style="font-family:宋体;">给</span><span style="font-family:Consolas;">{1}</span><span style="font-family:宋体;">赋值</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;/h:outputFormat&gt;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">国际化</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">同<span style="font-family:Consolas;">java</span><span style="font-family:宋体;">基本国际化规则：属性文件同目录下放多个类似属性文件，如：&nbsp;</span><span style="font-family:Consolas;">messages.properties</span><span style="font-family:宋体;">、</span><span style="font-family:Consolas;">messages_zh.properties</span><span style="font-family:宋体;">等</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<!--EndFragment-->]]></description>
	<pubDate>Wed, 09 Nov 2011 12:17:22 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=13</guid>

</item>
<item>
	<title>第八节：JSF2.0：Expression Language</title>
	<link>http://www.java-time.com/?post=12</link>
	<description><![CDATA[<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">本节主题</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;使用<span style="font-family:Consolas;">expression&nbsp;language</span><span style="font-family:宋体;">的积极因素</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:Consolas;">Comparing&nbsp;to&nbsp;the&nbsp;JSF&nbsp;1.x&nbsp;and&nbsp;JSP&nbsp;2.0&nbsp;ELs</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;访问<span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">属性</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;直接<span style="font-family:Consolas;">Direct</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;嵌套<span style="font-family:Consolas;">Nested</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;提交<span style="font-family:Consolas;">bean</span><span style="font-family:宋体;">属性</span><span style="font-family:Consolas;">Submitting&nbsp;bean&nbsp;properties</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:Consolas;">Expressions&nbsp;in&nbsp;output&nbsp;values</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:Consolas;">Expressions&nbsp;in&nbsp;submission&nbsp;values</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:Consolas;">Expressions&nbsp;for&nbsp;action&nbsp;controllers</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;访问集合元素<span style="font-family:Consolas;">Accessing&nbsp;collection&nbsp;elements</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;使用隐式对象和操作符<span style="font-family:Consolas;">Using&nbsp;implicit&nbsp;objects&nbsp;and&nbsp;operators</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;向方法传递参数<span style="font-family:Consolas;">Passing&nbsp;arguments&nbsp;to&nbsp;methods</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Why&nbsp;Expression&nbsp;language<span style="font-family:宋体;">（简称</span><span style="font-family:Consolas;">EL</span><span style="font-family:宋体;">）？</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">在<span style="font-family:Consolas;">facelets(*.xhtml)</span><span style="font-family:宋体;">中不支持</span><span style="font-family:Consolas;">jsp&nbsp;scripting</span><span style="font-family:宋体;">，因此需要提供一种直接调用</span><span style="font-family:Consolas;">java</span><span style="font-family:宋体;">的方式</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">举例：</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1<span style="font-family:宋体;">、</span><span style="font-family:Consolas;">#{employee.firstName}</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2<span style="font-family:宋体;">、</span><span style="font-family:Consolas;">&lt;h:inputText&nbsp;value="#{employee.firstName}"&nbsp;/&gt;</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">3<span style="font-family:宋体;">、</span><span style="font-family:Consolas;">#{employee.addresses[0].zip}</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Expression&nbsp;Language<span style="font-family:宋体;">（简称</span><span style="font-family:Consolas;">EL</span><span style="font-family:宋体;">）&nbsp;的优点：</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Bean<span style="font-family:宋体;">属性的简化符号（</span><span style="font-family:Consolas;">Very&nbsp;Important</span><span style="font-family:宋体;">）</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">#{company.companyName}&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">#{company.president.firstName}</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">简化了集合元素的访问（<span style="font-family:Consolas;">Very&nbsp;Important</span><span style="font-family:宋体;">）</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">#{someBean.someProperty[indexOrKey]},#{person&nbsp;friends[2]}</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">小但有用的简单操作集合（<span style="font-family:Consolas;">Moderately&nbsp;Important</span><span style="font-family:宋体;">）</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">算数、关系、逻辑、空测试&nbsp;等操作</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">4、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">条件输出（<span style="font-family:Consolas;">Moderately&nbsp;Important</span><span style="font-family:宋体;">）</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">#{test&nbsp;?&nbsp;option1&nbsp;:&nbsp;option2}</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;h:someElement&nbsp;<span style="font-family:宋体;">…&nbsp;</span><span style="font-family:Consolas;">rendered="#{test}"/&gt;</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">c)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;ui:fragment&nbsp;rendered="<span style="font-family:宋体;">…</span><span style="font-family:Consolas;">"&gt;</span><span style="font-family:宋体;">…</span><span style="font-family:Consolas;">&lt;/ui:fragment&gt;</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">5、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">预定义变量（<span style="font-family:Consolas;">Less&nbsp;Important</span><span style="font-family:宋体;">）</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;request&nbsp;params,&nbsp;cookies,&nbsp;HTTP&nbsp;headers<span style="font-family:宋体;">。。。。。。</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">6、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">传递参数（<span style="font-family:Consolas;">Less&nbsp;Important</span><span style="font-family:宋体;">）</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">JSF2.1&nbsp;EL&nbsp;<span style="font-family:宋体;">允许传递任意参数，仅可在</span><span style="font-family:Consolas;">JEE6</span><span style="font-family:宋体;">中得到支持</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">7、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Empty&nbsp;values<span style="font-family:宋体;">替代了错误信息（</span><span style="font-family:Consolas;">Less&nbsp;Important</span><span style="font-family:宋体;">）</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">值不存在、<span style="font-family:Consolas;">Null</span><span style="font-family:宋体;">均返回空字符串，而不是抛出异常</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><a id="ematt:23" href="http://www.java-time.com/content/uploadfile/201111/1e1b1bee9ab8d94dacf75bd5e1703dbd20111109114147.png" target="_blank"><img border="0" alt="点击查看原图" src="http://www.java-time.com/content/uploadfile/201111/thum-1e1b1bee9ab8d94dacf75bd5e1703dbd20111109114147.png" /></a></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">访问</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">Bean<span style="font-family:宋体;">属性</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">简单属性</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">#{varName.propertyName}<span style="font-family:宋体;">、</span><span style="font-family:'Times New Roman';">&lt;h:outputText&nbsp;value="#{varName.propertyName}"&nbsp;</span><span style="font-family:宋体;">…</span><span style="font-family:'Times New Roman';">/&gt;</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">解释：&nbsp;首先在所有定义的<span style="font-family:'Times New Roman';">scope</span><span style="font-family:宋体;">（</span><span style="font-family:'Times New Roman';">request</span><span style="font-family:宋体;">、</span><span style="font-family:'Times New Roman';">session</span><span style="font-family:宋体;">、</span><span style="font-family:'Times New Roman';">application</span><span style="font-family:宋体;">，按照如此顺序）中查找“</span><span style="font-family:'Times New Roman';">varName</span><span style="font-family:宋体;">”，然后找到</span><span style="font-family:'Times New Roman';">Managed&nbsp;Bean</span><span style="font-family:宋体;">的定义并且实例化，最后调用</span><span style="font-family:'Times New Roman';">getter</span><span style="font-family:宋体;">方法输出结果。</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">嵌套属性</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">#{var.prop1.prop2.prop3}<span style="font-family:宋体;">、</span><span style="font-family:'Times New Roman';">&lt;h:outputText&nbsp;value="#{var.prop1.prop2.prop3}"&nbsp;</span><span style="font-family:宋体;">…</span><span style="font-family:'Times New Roman';">/&gt;</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">解释：同上、查找、实例，最后调用<span style="font-family:'Times New Roman';">getProp1().getProp2().getProp3(),</span><span style="font-family:宋体;">输出结果</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">提交<span style="font-family:'Times New Roman';">Bean</span><span style="font-family:宋体;">属性</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">#{...}<span style="font-family:宋体;">的三种用法：</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">指定输出的值：</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">#{employee.address}&nbsp;<span style="font-family:宋体;">或者</span><span style="font-family:'Times New Roman';">&lt;h:outputText&nbsp;value="#{employee.address}"/&gt;</span><span style="font-family:宋体;">，任何时候可以调用，意思是输出</span><span style="font-family:'Times New Roman';">getAddress();</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&lt;h:itputText&nbsp;value="#{employee.address}"/&gt;<span style="font-family:宋体;">，当</span><span style="font-family:'Times New Roman';">form</span><span style="font-family:宋体;">在初始化显示时，调用</span><span style="font-family:'Times New Roman';">getAddress()</span><span style="font-family:宋体;">进行预填充，如果返回值不是</span><span style="font-family:'Times New Roman';">non-empty</span><span style="font-family:宋体;">，则作为</span><span style="font-family:'Times New Roman';">input</span><span style="font-family:宋体;">的值</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">指定提交的值：</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&lt;h:inputText&nbsp;value="#{employee.address}"/&gt;<span style="font-family:宋体;">，当</span><span style="font-family:'Times New Roman';">form</span><span style="font-family:宋体;">提交时，传递值到</span><span style="font-family:'Times New Roman';">setAddress</span><span style="font-family:宋体;">方法</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">指定提交后调用的方法</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&lt;h:commandButton&nbsp;value="Button&nbsp;Label"&nbsp;action="#{employee.processEmployee}"/&gt;<span style="font-family:宋体;">，当</span><span style="font-family:'Times New Roman';">from</span><span style="font-family:宋体;">提交时，指定</span><span style="font-family:'Times New Roman';">action&nbsp;handler</span><span style="font-family:宋体;">，</span><span style="font-family:'Times New Roman';">processEmployee</span><span style="font-family:宋体;">是其准确方法名，而不是简写。</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">理解<span style="font-family:'Times New Roman';">Getter()&nbsp;&amp;&nbsp;Setter()</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">举例：<span style="font-family:'Times New Roman';">&lt;h:inputText&nbsp;value="#{myBean.a.b.c.d}"/&gt;</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">当显示<span style="font-family:'Times New Roman';">form</span><span style="font-family:宋体;">时：查找并实例</span><span style="font-family:'Times New Roman';">myBean</span><span style="font-family:宋体;">，调用</span><span style="font-family:'Times New Roman';">myBean.getA().getB().getC().getD(),</span><span style="font-family:宋体;">如果值是</span><span style="font-family:'Times New Roman';">non-empty</span><span style="font-family:宋体;">，作为</span><span style="font-family:'Times New Roman';">textfield</span><span style="font-family:宋体;">的初始值</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">当提交<span style="font-family:'Times New Roman';">form</span><span style="font-family:宋体;">时：查找</span><span style="font-family:'Times New Roman';">myBean</span><span style="font-family:宋体;">，调用</span><span style="font-family:'Times New Roman';">myBean.getA().getB().setD(value)&nbsp;</span><span style="font-family:宋体;">（假定参数通过验证）</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">使用<span style="font-family:'Times New Roman';">EL</span><span style="font-family:宋体;">访问集合</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">Array&nbsp;</span><span style="font-family:宋体;">：</span><span style="font-family:'Times New Roman';">theArray[index]</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">List&nbsp;</span><span style="font-family:宋体;">：&nbsp;</span><span style="font-family:'Times New Roman';">theList[index]</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">Map</span><span style="font-family:宋体;">：</span><span style="font-family:'Times New Roman';">theMap.key&nbsp;</span><span style="font-family:宋体;">或者&nbsp;</span><span style="font-family:'Times New Roman';">theMap["key"]</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">EL<span style="font-family:宋体;">预定义对象</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">JSF&nbsp;EL&nbsp;<span style="font-family:宋体;">和</span><span style="font-family:'Times New Roman';">JSP2</span><span style="font-family:宋体;">具有几乎相同的预定义对象：</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">facesContext&nbsp;</span><span style="font-family:宋体;">如：</span><span style="font-family:'Times New Roman';">#{facesContext.externalContext.remoteUser}</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">param.&nbsp;Request&nbsp;params</span><span style="font-family:宋体;">，如&nbsp;</span><span style="font-family:'Times New Roman';">#{param.custID}</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">header.&nbsp;Request&nbsp;headers</span><span style="font-family:宋体;">，如&nbsp;</span><span style="font-family:'Times New Roman';">#{header.Accept}&nbsp;or&nbsp;#{header["Accept"]}&nbsp;#{header["Accept-Encoding"]}</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">cookie&nbsp;Cookie&nbsp;object&nbsp;(not&nbsp;cookie&nbsp;value)&nbsp;</span><span style="font-family:宋体;">，如：</span><span style="font-family:'Times New Roman';">#{cookie.userCookie.value}&nbsp;</span><span style="font-family:宋体;">或者</span><span style="font-family:'Times New Roman';">#{cookie["userCookie"].value}</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">request,&nbsp;session</span><span style="font-family:宋体;">，如：</span><span style="font-family:'Times New Roman';">#{request&nbsp;queryString}&nbsp;#{session&nbsp;id}&nbsp;</span><span style="font-family:宋体;">•&nbsp;</span><span style="font-family:'Times New Roman';">#{request.queryString},&nbsp;#{session.id}</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">initParam.&nbsp;Context&nbsp;initialization&nbsp;param.</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;<span style="font-family:'Times New Roman';">requestScope,&nbsp;sessionScope,&nbsp;applicationScope,&nbsp;</span><span style="font-family:宋体;">等</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">问题：有些情况下，需要在<span style="font-family:'Times New Roman';">java&nbsp;</span><span style="font-family:宋体;">代码中访问相关预定义对象，而不是</span><span style="font-family:'Times New Roman';">EL</span><span style="font-family:宋体;">中。</span><span style="font-family:'Times New Roman';">(</span><span style="font-family:宋体;">一般可以通过</span><span style="font-family:'Times New Roman';">FacesContext</span><span style="font-family:宋体;">获取</span><span style="font-family:'Times New Roman';">)</span><span style="font-family:宋体;">。</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在<span style="font-family:'Times New Roman';">bean</span><span style="font-family:宋体;">中，</span><span style="font-family:'Times New Roman';">FacesContext</span><span style="font-family:宋体;">获取方式：</span><span style="font-family:'Times New Roman';">ExternalContext&nbsp;context&nbsp;=&nbsp;FacesContext.getCurrentInstance().getExternalContext();</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">EL<span style="font-family:宋体;">操作符</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">算数操作符：<span style="font-family:'Times New Roman';">+&nbsp;-&nbsp;*&nbsp;/&nbsp;div&nbsp;%&nbsp;mod</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">关系操作符：<span style="font-family:'Times New Roman';">==&nbsp;eq&nbsp;!=&nbsp;ne&nbsp;&lt;&nbsp;lt&nbsp;&gt;&nbsp;gt&nbsp;&lt;=&nbsp;le&nbsp;&gt;=&nbsp;ge</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">逻辑操作符：<span style="font-family:'Times New Roman';">&amp;&amp;and||or!Not</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">4、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">Empty<span style="font-family:宋体;">操作符：</span><span style="font-family:'Times New Roman';">empty</span><span style="font-family:宋体;">。</span><span style="font-family:'Times New Roman';">null,&nbsp;empty&nbsp;string,&nbsp;empty&nbsp;array,&nbsp;empty&nbsp;list,&nbsp;empty&nbsp;map&nbsp;</span><span style="font-family:宋体;">返回</span><span style="font-family:'Times New Roman';">true</span><span style="font-family:宋体;">，其他情况返回</span><span style="font-family:'Times New Roman';">false</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">说明：</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">Use&nbsp;lt,&nbsp;gt,&nbsp;ge,&nbsp;and,&nbsp;<span style="font-family:宋体;">等替代</span><span style="font-family:'Times New Roman';">&lt;,&nbsp;&gt;,&nbsp;&gt;=,&nbsp;&amp;&amp;&nbsp;(</span><span style="font-family:宋体;">在</span><span style="font-family:'Times New Roman';">XML</span><span style="font-family:宋体;">中</span><span style="font-family:'Times New Roman';">)</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">尽可能少的使用操作符，从而保持<span style="font-family:'Times New Roman';">MVC</span><span style="font-family:宋体;">模型</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">JSF<span style="font-family:宋体;">中的条件</span><span style="font-family:'Times New Roman';">text</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">存在以下三种条件<span style="font-family:'Times New Roman';">Text</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">#{someCondition&nbsp;?&nbsp;simpleVal1&nbsp;:&nbsp;simpleVal2}</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">使用场景：简单的文本输出（非<span style="font-family:'Times New Roman';">HTML</span><span style="font-family:宋体;">文本）</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&lt;h:outputText&nbsp;value="#{someValue}"&nbsp;rendered=&nbsp;#{someCondition}&nbsp;/&gt;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">使用场景：简单的文本输出（非<span style="font-family:'Times New Roman';">HTML</span><span style="font-family:宋体;">文本）</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">3<span style="font-family:宋体;">、</span><span style="font-family:'Times New Roman';">&lt;ui:fragment&nbsp;rendered="#{someCondition}"/&gt;</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&lt;someHTML&gt;<span style="font-family:宋体;">…</span><span style="font-family:'Times New Roman';">&lt;/someHTML&gt;</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">&nbsp;&nbsp;&nbsp;&lt;/ui:fragment&gt;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">使用场景：格式化<span style="font-family:'Times New Roman';">HTML</span><span style="font-family:宋体;">文本输出</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">向方法传递参数</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">EL2.1&nbsp;<span style="font-family:宋体;">允许访问常规方法（非零参数方法）</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">语法：<span style="font-family:'Times New Roman';">#{someBean.someMethod(arg1,&nbsp;arg2)}</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">注意：</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">尽可能少用：&nbsp;在<span style="font-family:'Times New Roman';">java</span><span style="font-family:宋体;">代码中处理复杂，而非</span><span style="font-family:'Times New Roman';">facelets</span><span style="font-family:宋体;">中</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">只在<span style="font-family:'Times New Roman';">JEE6</span><span style="font-family:宋体;">中可以使用，不是</span><span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">的一部分</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">c)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">自<span style="font-family:'Times New Roman';">2001.3</span><span style="font-family:宋体;">起，不能够调用参数为可变参数的方法</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<!--EndFragment-->]]></description>
	<pubDate>Wed, 09 Nov 2011 11:40:33 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=12</guid>

</item>
<item>
	<title>第七节：JSF2.0：Explicit Page Navigation–and faces-config.xml</title>
	<link>http://www.java-time.com/?post=11</link>
	<description><![CDATA[<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">本节主题</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;显式导航规则<span style="font-family:Consolas;">Explicit&nbsp;navigation&nbsp;rules</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;显式<span style="font-family:Consolas;">bean</span><span style="font-family:宋体;">声明</span><span style="font-family:Consolas;">Explicit&nbsp;bean&nbsp;declarations</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;高级导航选项<span style="font-family:Consolas;">Advanced&nbsp;navigation&nbsp;options</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;导航通配符</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;条件导航</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;动态计算</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;静态导航</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;常见的导航问题</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">对于本节内容，翻译略去，主要原因：</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">思路和<span style="font-family:Consolas;">struts</span><span style="font-family:宋体;">类似</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">隐式导航基本上能够满足开发，不需要显式的通过<span style="font-family:Consolas;">xml</span><span style="font-family:宋体;">配置，复杂化</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<!--EndFragment-->]]></description>
	<pubDate>Tue, 08 Nov 2011 13:59:46 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=11</guid>

</item>
<item>
	<title>第六节：JSF2.0：Managed Beans II–Advanced Features</title>
	<link>http://www.java-time.com/?post=10</link>
	<description><![CDATA[<div style="layout-grid:15.6pt none;" class="Section0">
<h1 style="margin-top:0pt;margin-bottom:0pt;"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">本节主题</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></h1>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;自定义<span style="font-family:Consolas;">Bean&nbsp;Name</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;<span style="font-family:Consolas;">Bean&nbsp;scopes</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">–&nbsp;尤其是<span style="font-family:Consolas;">session-scoped&nbsp;beans</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;在<span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">中访问原生的</span><span style="font-family:Consolas;">Request</span><span style="font-family:宋体;">和&nbsp;</span><span style="font-family:Consolas;">Response</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;<span style="font-family:Consolas;">Dependency&nbsp;injection</span><span style="font-family:宋体;">（依赖注入）</span></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span>&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">自定义<span style="font-family:'Times New Roman';">Bean&nbsp;Name</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">举例：</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#646464;font-size:10.5pt;mso-spacerun:'yes';">@ManagedBean</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">(name=</span><span style="font-family:'Consolas';color:#2a00ff;font-size:10.5pt;mso-spacerun:'yes';">"anyName"</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">)</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;mso-spacerun:'yes';">public</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;</span><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;mso-spacerun:'yes';">class</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;BeanName&nbsp;{</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">使用时：<span style="font-family:Consolas;">#{anyName.blah}</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">注意：&nbsp;<span style="font-family:Consolas;">1</span><span style="font-family:宋体;">、缺省</span><span style="font-family:Consolas;">scope</span><span style="font-family:宋体;">仍然是</span><span style="font-family:Consolas;">request&nbsp;scope&nbsp;&nbsp;&nbsp;2</span><span style="font-family:宋体;">、仍然不需要在</span><span style="font-family:Consolas;">faces-config.xml</span><span style="font-family:宋体;">中定义</span><span style="font-family:Consolas;">entry</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">控制<span style="font-family:Consolas;">Bean&nbsp;Scopes</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">有六种<span style="font-family:Consolas;">Scope</span><span style="font-family:宋体;">：</span><span style="font-family:Consolas;">request,&nbsp;session,&nbsp;application,&nbsp;view,&nbsp;none,&nbsp;custom</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">既可以在<span style="font-family:Consolas;">faces-config.xml</span><span style="font-family:宋体;">中声明，也可以使用新的注释，如：&nbsp;</span><span style="font-family:Consolas;">@SessionScoped</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">缺省<span style="font-family:Consolas;">scope</span><span style="font-family:宋体;">仍然是</span><span style="font-family:Consolas;">request&nbsp;scope</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">用注解声明<span style="font-family:Consolas;">Scope</span><span style="font-family:宋体;">：</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">举例：（一般放在<span style="font-family:Consolas;">@ManagedBean</span><span style="font-family:宋体;">之后）</span></span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#646464;font-size:10.5pt;mso-spacerun:'yes';">@ManagedBean</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#646464;font-size:10.5pt;mso-spacerun:'yes';">@</span><span style="font-family:'Consolas';background:#c0c0c0;color:#646464;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#c0c0c0;">SessionScoped</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;mso-spacerun:'yes';">public</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;</span><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;mso-spacerun:'yes';">class</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;UserBean&nbsp;{</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">@RequestScoped</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">缺省的。</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">@SessionScoped</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">与<span style="font-family:Consolas;">session</span><span style="font-family:宋体;">类似，</span><span style="font-family:Consolas;">timeout</span><span style="font-family:宋体;">后失效，</span><span style="font-family:Consolas;">bean</span><span style="font-family:宋体;">必须是</span><span style="font-family:Consolas;">Serializable</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">@ApplicationScoped</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">所有用户均可以访问，</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">@ViewScoped</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">同一用户在同一页面<span style="font-family:Consolas;">(page)</span><span style="font-family:宋体;">，使用同一</span><span style="font-family:Consolas;">bean</span><span style="font-family:宋体;">实例</span><span style="font-family:Consolas;">(e.g.,&nbsp;with&nbsp;event&nbsp;handlers&nbsp;or&nbsp;Ajax).&nbsp;</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;<span style="font-family:Consolas;">New&nbsp;scope&nbsp;in&nbsp;JSF&nbsp;2&nbsp;0&nbsp;New&nbsp;scope&nbsp;in&nbsp;JSF&nbsp;2.0.&nbsp;</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;<span style="font-family:Consolas;">Bean&nbsp;should&nbsp;implement&nbsp;Serializable</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">@CustomScoped(value="#{someMap}")</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Bean&nbsp;is&nbsp;stored&nbsp;in&nbsp;the&nbsp;Map,&nbsp;and&nbsp;programmer&nbsp;can&nbsp;control&nbsp;lifecycle.</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">@NoneScoped</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">没有被放到任何<span style="font-family:Consolas;">scope</span><span style="font-family:宋体;">，使用场景：被其他</span><span style="font-family:Consolas;">scope&nbsp;bean</span><span style="font-family:宋体;">引用</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">在<span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">中访问原生的</span><span style="font-family:Consolas;">Request</span><span style="font-family:宋体;">和&nbsp;</span><span style="font-family:Consolas;">Response</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">为什么要在<span style="font-family:Consolas;">JSF</span><span style="font-family:宋体;">中使用</span><span style="font-family:Consolas;">Request</span><span style="font-family:宋体;">和</span><span style="font-family:Consolas;">Response</span><span style="font-family:宋体;">？</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">使用<span style="font-family:Consolas;">Request&nbsp;Object</span><span style="font-family:宋体;">：</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">显式的进行<span style="font-family:Consolas;">session</span><span style="font-family:宋体;">操作</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">显式的进行<span style="font-family:Consolas;">cookie</span><span style="font-family:宋体;">操作</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">访问<span style="font-family:Consolas;">request&nbsp;header</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">查找<span style="font-family:Consolas;">requesting&nbsp;host&nbsp;name</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">使用<span style="font-family:Consolas;">Response&nbsp;Object</span><span style="font-family:宋体;">：</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">设置&nbsp;<span style="font-family:Consolas;">status&nbsp;codes</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">设置&nbsp;<span style="font-family:Consolas;">response&nbsp;headers</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">设置&nbsp;<span style="font-family:Consolas;">long-lived&nbsp;cookies</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Bean<span style="font-family:宋体;">中</span><span style="font-family:Consolas;">reqeust&nbsp;</span><span style="font-family:宋体;">、</span><span style="font-family:Consolas;">response</span><span style="font-family:宋体;">访问方式：</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">ExternalContext&nbsp;context&nbsp;=&nbsp;FacesContext.</span><span style="font-style:italic;font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">getCurrentInstance</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">().getExternalContext();</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">HttpServletRequest&nbsp;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;text-decoration:underline;mso-spacerun:'yes';">request</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;=&nbsp;(HttpServletRequest)&nbsp;context.getRequest();</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">HttpServletResponse&nbsp;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;text-decoration:underline;mso-spacerun:'yes';">response</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;=&nbsp;(HttpServletResponse)&nbsp;context.getResponse();</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">注：在某些环境下，</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">getRequest()</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">和</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">getResponse()</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">类型转换时可能不是</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">HttpServletRequest</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">和</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">HttpServletResponse</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">，比如，在</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">portlet<span style="font-family:宋体;">环境中，类型转为应该为：</span><span style="font-family:Consolas;">PortletRequest&nbsp;</span><span style="font-family:宋体;">和</span><span style="font-family:Consolas;">PortletResponse</span></span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&nbsp;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Dependency&nbsp;injection<span style="font-family:宋体;">（依赖注入）：使用</span><span style="font-family:Consolas;">@ManagedProperty</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">JSF2<span style="font-family:宋体;">支持简单的依赖注入，不是很强大，但是很有用，用法：</span></span><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Consolas';color:#646464;font-size:10.5pt;mso-spacerun:'yes';">@Managed</span><span style="font-family:'宋体';color:#646464;font-size:10.5pt;mso-spacerun:'yes';">Property</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">(</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">value</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">=</span><span style="font-family:'Consolas';color:#2a00ff;font-size:10.5pt;mso-spacerun:'yes';">"</span><span style="font-family:'宋体';color:#2a00ff;font-size:10.5pt;mso-spacerun:'yes';">#{someBean}</span><span style="font-family:'Consolas';color:#2a00ff;font-size:10.5pt;mso-spacerun:'yes';">"</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">)</span><span style="font-family:'Consolas';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">private&nbsp;SomeType&nbsp;someField;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">依赖注入的<span style="font-family:Consolas;">property</span><span style="font-family:宋体;">必须有</span><span style="font-family:Consolas;">setter</span><span style="font-family:宋体;">方法</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">可以指定<span style="font-family:Consolas;">bean</span><span style="font-family:宋体;">的实例化时机。</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">@ManagedBean(eager=true):<span style="font-family:宋体;">当</span><span style="font-family:Consolas;">app</span><span style="font-family:宋体;">被加载时，实例化</span><span style="font-family:Consolas;">bean</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">4、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Faces-config-xml&amp;<span style="font-family:宋体;">注释</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">前者可以不改变<span style="font-family:Consolas;">java</span><span style="font-family:宋体;">代码而实现依赖注入</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">前者可以指定<span style="font-family:Consolas;">Map&nbsp;elements</span><span style="font-family:宋体;">，而后者不能够</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">5、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Spring&nbsp;is&nbsp;best&nbsp;of&nbsp;all&nbsp;(?)</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Spring<span style="font-family:宋体;">更强大，毫无置疑，</span><span style="font-family:Consolas;">JSF</span><span style="font-family:宋体;">可以简单的和</span><span style="font-family:Consolas;">Spring</span><span style="font-family:宋体;">整合。</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
</div>
<!--EndFragment-->]]></description>
	<pubDate>Tue, 08 Nov 2011 13:50:24 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=10</guid>

</item>
<item>
	<title>第五节：JSF2.0：Managed Beans I</title>
	<link>http://www.java-time.com/?post=9</link>
	<description><![CDATA[<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">本节主题</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;“<span style="font-family:Consolas;">managed</span><span style="font-family:宋体;">”&nbsp;</span><span style="font-family:Consolas;">beans</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;<span style="font-family:Consolas;">JSF</span><span style="font-family:宋体;">中</span><span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">的三部分</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;预填充<span style="font-family:Consolas;">input&nbsp;fields</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;使用<span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">属性用来处理</span><span style="font-family:Consolas;">request</span><span style="font-family:宋体;">的参数&nbsp;</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Bean<span style="font-family:宋体;">的基本要求：</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">无参构造器、无<span style="font-family:Consolas;">public</span><span style="font-family:宋体;">实例变量、</span><span style="font-family:Consolas;">getter/setter</span><span style="font-family:宋体;">命名约定</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">JSF<span style="font-family:宋体;">中引用</span><span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">属性</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<a id="ematt:17" href="http://www.java-time.com/content/uploadfile/201111/1ed045465c343d32f321abb661d327ca20111108125953.png" target="_blank"><img border="0" alt="点击查看原图" src="http://www.java-time.com/content/uploadfile/201111/thum-1ed045465c343d32f321abb661d327ca20111108125953.png" /></a> <p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">Managed&nbsp;Beans</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">JSF&nbsp;<span style="font-family:宋体;">自动“管理”</span><span style="font-family:'Times New Roman';">bean</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">实例化：&nbsp;无参构造器</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">控制其生命周期：<span style="font-family:'Times New Roman';">Scope&nbsp;(request,&nbsp;session,&nbsp;application)&nbsp;</span><span style="font-family:宋体;">决定其生命时间</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">c)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">调用<span style="font-family:'Times New Roman';">setter</span><span style="font-family:宋体;">方法：如，</span></span><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#ffffff;">&lt;</span><span style="font-family:'Consolas';background:#ffffff;color:#3f7f7f;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#ffffff;">h:inputText</span><span style="font-family:'Consolas';background:#ffffff;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#ffffff;">&nbsp;&nbsp;</span><span style="font-family:'Consolas';background:#ffffff;color:#7f007f;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#ffffff;">value</span><span style="font-family:'Consolas';background:#ffffff;color:#000000;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#ffffff;">=</span><span style="font-style:italic;font-family:'Consolas';background:#ffffff;color:#2a00ff;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#ffffff;">"#{userBean.firstName}"</span><span style="font-family:'Consolas';background:#ffffff;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#ffffff;">&nbsp;</span><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;mso-spacerun:'yes';mso-highlight:#ffffff;">/&gt;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">当<span style="font-family:'Times New Roman';">form</span><span style="font-family:宋体;">提交，</span><span style="font-family:'Times New Roman';">value</span><span style="font-family:宋体;">被传递至</span><span style="font-family:'Times New Roman';">setFirestName</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">d)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">调用<span style="font-family:'Times New Roman';">getter</span><span style="font-family:宋体;">方法：如，</span><span style="font-family:'Times New Roman';">#{customer.firstName}&nbsp;</span><span style="font-family:宋体;">导致调用</span><span style="font-family:'Times New Roman';">getFirstName</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">声明<span style="font-family:'Times New Roman';">bean</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">简化做法：在<span style="font-family:'Times New Roman';">class</span><span style="font-family:宋体;">之前声明</span><span style="font-family:'Times New Roman';">@ManagedBean</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">强大做法：在<span style="font-family:'Times New Roman';">faces-config.xml</span><span style="font-family:宋体;">中的</span><span style="font-family:'Times New Roman';">&lt;managed-bean&gt;</span><span style="font-family:宋体;">部分</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Managed&nbsp;Beans<span style="font-family:宋体;">的三个部分</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Bean&nbsp;properties</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">每一个<span style="font-family:Consolas;">input</span><span style="font-family:宋体;">元素，一对</span><span style="font-family:Consolas;">getter</span><span style="font-family:宋体;">、</span><span style="font-family:Consolas;">setter</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Setter<span style="font-family:宋体;">方法被自动调用，当</span><span style="font-family:Consolas;">form</span><span style="font-family:宋体;">提交的时候，在</span><span style="font-family:Consolas;">Action&nbsp;controller&nbsp;methods</span><span style="font-family:宋体;">被执行之前</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">c)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Getter<span style="font-family:宋体;">方法通过</span><span style="font-family:Consolas;">bean.properName</span><span style="font-family:宋体;">隐式调用</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Action&nbsp;controller&nbsp;methods</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">一般只有一个，但是也可以多个，如对于同一个<span style="font-family:Consolas;">form</span><span style="font-family:宋体;">如果有多个提交</span><span style="font-family:Consolas;">button</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Methods<span style="font-family:宋体;">被</span><span style="font-family:Consolas;">JSF</span><span style="font-family:宋体;">自动调用，当</span><span style="font-family:Consolas;">form</span><span style="font-family:宋体;">被提交，如：</span><span style="font-family:Consolas;">submit&nbsp;button</span><span style="font-family:宋体;">被点击</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">Placeholders&nbsp;for&nbsp;results&nbsp;data<span style="font-family:宋体;">结果数据占位符</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">a)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">JSF<span style="font-family:宋体;">不会自动</span><span style="font-family:Consolas;">filled&nbsp;in</span><span style="font-family:宋体;">。一般在</span><span style="font-family:Consolas;">Action&nbsp;controller&nbsp;Method</span><span style="font-family:宋体;">中根据业务逻辑进行</span><span style="font-family:Consolas;">set</span><span style="font-family:宋体;">赋值</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:-21pt;margin-bottom:0pt;margin-left:42pt;" class="p0"><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">b)&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">需要提供<span style="font-family:Consolas;">getter</span><span style="font-family:宋体;">方法，方可以在</span><span style="font-family:Consolas;">result&nbsp;page</span><span style="font-family:宋体;">中</span><span style="font-family:Consolas;">output</span><span style="font-family:宋体;">，但是</span><span style="font-family:Consolas;">setter</span><span style="font-family:宋体;">方法不一定需要</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">如下图：</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a id="ematt:18" href="http://www.java-time.com/content/uploadfile/201111/95106a90f455887e4a4b298735a4641b20111108125953.png" target="_blank"><img border="0" alt="点击查看原图" src="http://www.java-time.com/content/uploadfile/201111/thum-95106a90f455887e4a4b298735a4641b20111108125953.png" /></a><a id="ematt:19" href="http://www.java-time.com/content/uploadfile/201111/560d4514bc25f890a38519e8a401bbf020111108125954.png" target="_blank">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </a>&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img border="0" alt="点击查看原图" src="http://www.java-time.com/content/uploadfile/201111/thum-560d4514bc25f890a38519e8a401bbf020111108125954.png" /></p>
<p style="margin-top:0pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0">&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">预填充<span style="font-family:Consolas;">input&nbsp;fields</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">双重角色：<span style="font-family:Consolas;">Bean&nbsp;property&nbsp;refers&nbsp;to&nbsp;both&nbsp;getter&nbsp;&amp;&nbsp;setter</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">The&nbsp;getter&nbsp;method&nbsp;is&nbsp;called&nbsp;when&nbsp;form&nbsp;is&nbsp;displayed,&nbsp;and&nbsp;affects&nbsp;what&nbsp;is&nbsp;initially&nbsp;displayed&nbsp;to&nbsp;user</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">The&nbsp;value&nbsp;from&nbsp;the&nbsp;input&nbsp;element&nbsp;is&nbsp;passed&nbsp;to&nbsp;the&nbsp;setter&nbsp;method&nbsp;when&nbsp;the&nbsp;form&nbsp;is&nbsp;submitted</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">举例：</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;h:inputText<span style="font-family:宋体;">…</span><span style="font-family:Consolas;">/&gt;&nbsp;&nbsp;&nbsp;(textfield)&nbsp;getter</span><span style="font-family:宋体;">方法返回非空，则显示在</span><span style="font-family:Consolas;">textfield</span><span style="font-family:宋体;">中，</span><span style="font-family:Consolas;">submit</span><span style="font-family:宋体;">后，参数被传递调用</span><span style="font-family:Consolas;">setter</span><span style="font-family:宋体;">方法</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;h:selectBooleanCheckbox<span style="font-family:宋体;">…</span><span style="font-family:Consolas;">/&gt;&nbsp;&nbsp;(checkbox)&nbsp;getter</span><span style="font-family:宋体;">返回</span><span style="font-family:Consolas;">true</span><span style="font-family:宋体;">，则</span><span style="font-family:Consolas;">cheched</span><span style="font-family:宋体;">，反之则</span><span style="font-family:Consolas;">unchecked</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">&lt;h:selectOneMenu<span style="font-family:宋体;">…</span><span style="font-family:Consolas;">/&gt;&nbsp;(combobox;&nbsp;drop&nbsp;down&nbsp;menu)&nbsp;getter</span><span style="font-family:宋体;">方法返回值与下拉列表中某项匹配，则选中；如果没有匹配，则选中最上一项</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<!--EndFragment-->]]></description>
	<pubDate>Tue, 08 Nov 2011 12:57:48 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=9</guid>

</item>
<item>
	<title>第四节：JSF2.0：编程基础</title>
	<link>http://www.java-time.com/?post=8</link>
	<description><![CDATA[<h1 style="margin-top:0pt;margin-bottom:0pt;"><span style="font-family:'宋体';font-size:22pt;font-weight:bold;mso-spacerun:'yes';">第四节：<span style="font-family:'Times New Roman';">JSF2.0</span><span style="font-family:宋体;">：编程基础</span></span><span style="font-family:'宋体';font-size:22pt;font-weight:bold;mso-spacerun:'yes';"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></h1>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">本节主题</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;简化了得控制流程</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;<span style="font-family:Consolas;">@ManagedBean</span><span style="font-family:宋体;">缺省的</span><span style="font-family:Consolas;">bean</span><span style="font-family:宋体;">命名</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;为<span style="font-family:Consolas;">action&nbsp;controller</span><span style="font-family:宋体;">返回值进行缺省映射</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">•&nbsp;&nbsp;使用<span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">属性用来处理</span><span style="font-family:Consolas;">request</span><span style="font-family:宋体;">的参数&nbsp;</span></span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';">高度简化的控制流程：</span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;mso-spacerun:'yes';"><o:p><a id="ematt:11" href="http://www.java-time.com/content/uploadfile/201111/b6c31d01d41c9e1714958f9c56d01d8f20111107134542.png" target="_blank"><img border="0" alt="点击查看原图" src="http://www.java-time.com/content/uploadfile/201111/thum-b6c31d01d41c9e1714958f9c56d01d8f20111107134542.png" /></a></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">Facelets&nbsp;page<span style="font-family:宋体;">的基本结构：</span></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p><a id="ematt:12" href="http://www.java-time.com/content/uploadfile/201111/7142b8354ca8a352b2b805f997c7154920111107134543.png" target="_blank"><img border="0" alt="点击查看原图" src="http://www.java-time.com/content/uploadfile/201111/thum-7142b8354ca8a352b2b805f997c7154920111107134543.png" /></a></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">Managed&nbsp;Beans<span style="font-family:宋体;">的基本结构：</span></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><a id="ematt:13" href="http://www.java-time.com/content/uploadfile/201111/05266877d72b9576e8d907074ddda27420111107134543.png" target="_blank"><img border="0" alt="点击查看原图" src="http://www.java-time.com/content/uploadfile/201111/thum-05266877d72b9576e8d907074ddda27420111107134543.png" /></a></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span>&nbsp;</p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'Times New Roman';font-size:10.5pt;mso-spacerun:'yes';">@ManagedBean&nbsp;Basics</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">：</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">@ManagedBean&nbsp;annotation<span style="font-family:宋体;">，缺省</span><span style="font-family:'Times New Roman';">bean&nbsp;name</span><span style="font-family:宋体;">为：类名</span><span style="font-family:'Times New Roman';">(</span><span style="font-family:宋体;">不含包名</span><span style="font-family:'Times New Roman';">)</span><span style="font-family:宋体;">，首字母小写，缺省</span><span style="font-family:'Times New Roman';">Request&nbsp;Scope</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">action&nbsp;controller<span style="font-family:宋体;">方法的返回值：字符串，隐式映射到</span><span style="font-family:'Times New Roman';">xhtml</span><span style="font-family:宋体;">文件，如返回</span><span style="font-family:'Times New Roman';">"foo"</span><span style="font-family:宋体;">，则映射到</span><span style="font-family:'Times New Roman';">foo.xhtml</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">使用<span style="font-family:'Times New Roman';">Beans</span><span style="font-family:宋体;">处理请求参数：</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">1、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">输入值与<span style="font-family:'Times New Roman';">bean</span><span style="font-family:宋体;">属性对应</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;margin-left:21pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">如：<span style="font-family:'Times New Roman';">&lt;h:inputText&nbsp;value="#{someBean.someProp}"/&gt;</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">当<span style="font-family:'Times New Roman';">form</span><span style="font-family:宋体;">提交，</span><span style="font-family:'Times New Roman';">textfield</span><span style="font-family:宋体;">中的值被传递</span><span style="font-family:'Times New Roman';">setSomeProp</span><span style="font-family:宋体;">（之前需要进行校验和类型转换）</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;text-indent:21pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">当<span style="font-family:'Times New Roman';">form</span><span style="font-family:宋体;">被显示的时候，调用</span><span style="font-family:'Times New Roman';">getSomeProp</span><span style="font-family:宋体;">方法，如果返回值不是</span><span style="font-family:'Times New Roman';">null</span><span style="font-family:宋体;">或者</span><span style="font-family:'Times New Roman';">empty&nbsp;string</span><span style="font-family:宋体;">，则在</span><span style="font-family:'Times New Roman';">textfield</span><span style="font-family:宋体;">中显示</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">2、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">Bean<span style="font-family:宋体;">的</span><span style="font-family:'Times New Roman';">Scope</span><span style="font-family:宋体;">缺省是</span><span style="font-family:'Times New Roman';">Request</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<p style="margin-top:0pt;margin-bottom:0pt;" class="p0"><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">3、</span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';">使用<span style="font-family:'Times New Roman';">#{bean.someProp}</span><span style="font-family:宋体;">可以直接输出</span></span><span style="font-family:'宋体';font-size:10.5pt;mso-spacerun:'yes';"><o:p></o:p></span></p>
<!--EndFragment-->]]></description>
	<pubDate>Mon, 07 Nov 2011 13:43:28 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=8</guid>

</item>
<item>
	<title>第三节：JSF2.0：新特性</title>
	<link>http://www.java-time.com/?post=6</link>
	<description><![CDATA[<h1><span style="font-family:'宋体';font-size:22pt;font-weight:bold;">第三节：<span style="font-family:'Times New Roman';">JSF2.0</span><span style="font-family:宋体;">：新特性</span></span></h1>
<p></p>
<p style="text-indent:21pt;"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">I'll&nbsp;admit&nbsp;it:&nbsp;I&nbsp;didn't&nbsp;like&nbsp;JSF&nbsp;1&nbsp;either.&nbsp;So,&nbsp;when&nbsp;JSF&nbsp;2&nbsp;came&nbsp;out,&nbsp;I&nbsp;had&nbsp;low&nbsp;expectations.&nbsp;But,&nbsp;when&nbsp;I&nbsp;looked&nbsp;at&nbsp;the&nbsp;beta&nbsp;version,&nbsp;I&nbsp;was&nbsp;very&nbsp;pleasantly&nbsp;surprised&nbsp;that&nbsp;they&nbsp;learned&nbsp;lessons&nbsp;from&nbsp;Ruby&nbsp;on&nbsp;Rails,&nbsp;JBoss&nbsp;Seam,&nbsp;and&nbsp;the&nbsp;Ajax4Jsf&nbsp;library.&nbsp;And,&nbsp;now&nbsp;that&nbsp;I&nbsp;have&nbsp;used&nbsp;it&nbsp;much&nbsp;more&nbsp;and&nbsp;seen&nbsp;many&nbsp;of&nbsp;the&nbsp;features&nbsp;that&nbsp;support&nbsp;today's&nbsp;modern&nbsp;applications,&nbsp;I&nbsp;have&nbsp;concluded&nbsp;that&nbsp;JSF&nbsp;2&nbsp;is&nbsp;probably&nbsp;the&nbsp;overall-best&nbsp;mainstream&nbsp;Java-based&nbsp;Web&nbsp;app&nbsp;framework&nbsp;now&nbsp;in&nbsp;existence.</span></p>
<p style="text-indent:21pt;"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">我必须承认，我也不喜欢<span style="font-family:Consolas;">JSF1.</span><span style="font-family:宋体;">因此，当</span><span style="font-family:Consolas;">JSF2</span><span style="font-family:宋体;">出来是，并没有过高期望。但是当我看到</span><span style="font-family:Consolas;">beta</span><span style="font-family:宋体;">版本的时候，非常惊讶于他们能够从</span><span style="font-family:Consolas;">Ruby&nbsp;on&nbsp;Rails,&nbsp;JBoss&nbsp;Seam,&nbsp;</span><span style="font-family:宋体;">和</span><span style="font-family:Consolas;">Ajax4Jsf&nbsp;library</span><span style="font-family:宋体;">汲取经验。现在，我更多的使用它，并且也看到了对于现代应用支持的更多特性。我断定</span><span style="font-family:Consolas;">JSF2</span><span style="font-family:宋体;">可能是现有的最好的基于</span><span style="font-family:Consolas;">Java</span><span style="font-family:宋体;">的主流</span><span style="font-family:Consolas;">Webapp&nbsp;framework</span><span style="font-family:宋体;">。</span></span></p>
<p style="text-indent:21pt;"></p>
<p style="text-indent:21pt;"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">Here&nbsp;is&nbsp;a&nbsp;very&nbsp;brief&nbsp;summary&nbsp;of&nbsp;the&nbsp;most&nbsp;important&nbsp;features&nbsp;that&nbsp;are&nbsp;new&nbsp;in&nbsp;JSF&nbsp;2.0&nbsp;(but&nbsp;not&nbsp;in&nbsp;JSF&nbsp;1.x).&nbsp;Details&nbsp;on&nbsp;all&nbsp;of&nbsp;these&nbsp;topics&nbsp;are&nbsp;covered&nbsp;throughout&nbsp;the&nbsp;rest&nbsp;of&nbsp;the&nbsp;lectures.&nbsp;This&nbsp;section&nbsp;is&nbsp;mostly&nbsp;only&nbsp;useful&nbsp;for&nbsp;people&nbsp;who&nbsp;used&nbsp;JSF&nbsp;1.x;&nbsp;if&nbsp;you&nbsp;are&nbsp;new&nbsp;to&nbsp;JSF,&nbsp;start&nbsp;with&nbsp;the&nbsp;two&nbsp;sections&nbsp;above,&nbsp;then&nbsp;move&nbsp;on&nbsp;to&nbsp;the&nbsp;programming&nbsp;basics&nbsp;section.</span></p>
<p style="text-indent:21pt;"><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">以下是对<span style="font-family:Consolas;">JSF2.0</span><span style="font-family:宋体;">（不是在</span><span style="font-family:Consolas;">JSF1.x</span><span style="font-family:宋体;">）中新加入的几个最重要特性的一个简短介绍。后续讲座会完全覆盖这些主题。本节仅对于使用过</span><span style="font-family:Consolas;">JSF1.x</span><span style="font-family:宋体;">的人有用，如果你是新接触</span><span style="font-family:Consolas;">JSF</span><span style="font-family:宋体;">，通过之前两节，直接跳到下一节：</span><span style="font-family:Consolas;">JSF2.0</span><span style="font-family:宋体;">编程基本。</span></span></p>
<p></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';color:#000000;font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">You&nbsp;have&nbsp;more&nbsp;debugging&nbsp;help&nbsp;during&nbsp;project&nbsp;development.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">To&nbsp;get&nbsp;started&nbsp;with&nbsp;JSF&nbsp;2.0,&nbsp;at&nbsp;the&nbsp;very&nbsp;least&nbsp;you&nbsp;need&nbsp;a&nbsp;web.xml&nbsp;with&nbsp;a&nbsp;url-pattern&nbsp;for&nbsp;*.jsf&nbsp;or&nbsp;something&nbsp;similar,&nbsp;and&nbsp;a&nbsp;faces-config.xml&nbsp;with&nbsp;valid&nbsp;start&nbsp;and&nbsp;end&nbsp;tags,&nbsp;just&nbsp;as&nbsp;in&nbsp;JSF&nbsp;1.x.&nbsp;However,&nbsp;in&nbsp;JSF&nbsp;2.0,&nbsp;you&nbsp;can&nbsp;optionally&nbsp;add&nbsp;a&nbsp;PROJECT_STAGE&nbsp;setting&nbsp;of&nbsp;Development&nbsp;to&nbsp;web.xml.&nbsp;By&nbsp;doing&nbsp;this,&nbsp;many&nbsp;errors&nbsp;that&nbsp;would&nbsp;silently&nbsp;fail&nbsp;in&nbsp;JSF&nbsp;1.x&nbsp;now&nbsp;result&nbsp;in&nbsp;explicit&nbsp;error&nbsp;messages.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">在项目开发过程中，你将拥有更多的调试帮助。可以选择在<span style="font-family:Consolas;">web.xml</span><span style="font-family:宋体;">中添加：</span></span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;">context-param</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&gt;</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;">param-name</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&gt;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">javax.faces.PROJECT_STAGE</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;">param-name</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&gt;</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&lt;</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;">param-value</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&gt;</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">Development</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;">param-value</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&gt;</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&lt;/</span><span style="font-family:'Consolas';color:#3f7f7f;font-size:10.5pt;">context-param</span><span style="font-family:'Consolas';color:#008080;font-size:10.5pt;">&gt;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">之前在<span style="font-family:Consolas;">JSF1.x</span><span style="font-family:宋体;">中静默失败的许多错误，现在可以产生明确的错误信息。</span></span></p>
<p></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';color:#000000;font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">Facelets,&nbsp;not&nbsp;JSP,&nbsp;is&nbsp;the&nbsp;standard&nbsp;technology&nbsp;for&nbsp;all&nbsp;your&nbsp;JSF&nbsp;pages.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">Name&nbsp;the&nbsp;pages&nbsp;blah.xhtml,&nbsp;but&nbsp;use&nbsp;the&nbsp;URL&nbsp;blah.jsf&nbsp;(assuming&nbsp;a&nbsp;url-pattern&nbsp;of&nbsp;*.jsf&nbsp;in&nbsp;web.xml).&nbsp;Use&nbsp;xhtml&nbsp;format&nbsp;for&nbsp;the&nbsp;pages&nbsp;themselves.&nbsp;Don't&nbsp;use&nbsp;@taglib,&nbsp;but&nbsp;instead&nbsp;use&nbsp;xmlns:h="http://java.sun.com/jsf/html".&nbsp;Then,&nbsp;use&nbsp;h:head,&nbsp;h:body,&nbsp;and&nbsp;h:form&nbsp;(but&nbsp;not&nbsp;usally&nbsp;f:view)&nbsp;in&nbsp;the&nbsp;page.&nbsp;You&nbsp;can&nbsp;find&nbsp;a&nbsp;representative&nbsp;sample&nbsp;here.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">Facelets<span style="font-family:宋体;">，而非</span><span style="font-family:Consolas;">JSP</span><span style="font-family:宋体;">，成为所有</span><span style="font-family:Consolas;">JSF</span><span style="font-family:宋体;">的标准</span><span style="font-family:Consolas;">page</span><span style="font-family:宋体;">技术。</span></span></p>
<p></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';color:#000000;font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">You&nbsp;can&nbsp;use&nbsp;default&nbsp;bean&nbsp;names.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">Instead&nbsp;of&nbsp;declaring&nbsp;beans&nbsp;with&nbsp;managed-bean&nbsp;in&nbsp;faces-config.xml,&nbsp;you&nbsp;can&nbsp;put&nbsp;@ManagedBean&nbsp;above&nbsp;the&nbsp;class&nbsp;definition.&nbsp;Then,&nbsp;take&nbsp;the&nbsp;bean&nbsp;classname,&nbsp;change&nbsp;the&nbsp;first&nbsp;letter&nbsp;to&nbsp;lower&nbsp;case,&nbsp;and&nbsp;use&nbsp;that&nbsp;as&nbsp;the&nbsp;managed&nbsp;bean&nbsp;name.&nbsp;For&nbsp;example,&nbsp;if&nbsp;the&nbsp;class&nbsp;is&nbsp;package1.package2.MyBean,&nbsp;you&nbsp;would&nbsp;use&nbsp;#{myBean.whatever}&nbsp;in&nbsp;your&nbsp;code.&nbsp;You&nbsp;can&nbsp;also&nbsp;do&nbsp;@ManagedBean(name="someName").&nbsp;Beans&nbsp;are&nbsp;request&nbsp;scoped&nbsp;by&nbsp;default,&nbsp;but&nbsp;there&nbsp;are&nbsp;annotations&nbsp;like&nbsp;@SessionScoped&nbsp;to&nbsp;change&nbsp;the&nbsp;default.&nbsp;This&nbsp;sample&nbsp;bean&nbsp;and&nbsp;the&nbsp;sample&nbsp;.xhtml&nbsp;page&nbsp;from&nbsp;above&nbsp;illustrate&nbsp;this.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">你可以使用缺省的<span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">命名。</span></span></p>
<p></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';color:#000000;font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">You&nbsp;can&nbsp;use&nbsp;default&nbsp;mappings&nbsp;of&nbsp;outcomes&nbsp;to&nbsp;results&nbsp;pages.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">In&nbsp;the&nbsp;absence&nbsp;of&nbsp;explicit&nbsp;navigation&nbsp;rules,&nbsp;the&nbsp;return&nbsp;values&nbsp;of&nbsp;the&nbsp;action&nbsp;controller&nbsp;method&nbsp;correspond&nbsp;to&nbsp;the&nbsp;file&nbsp;names&nbsp;that&nbsp;should&nbsp;be&nbsp;used.&nbsp;Suppose&nbsp;that&nbsp;your&nbsp;form&nbsp;(file&nbsp;form.xhtml,&nbsp;URL&nbsp;form.jsf)&nbsp;says&nbsp;&lt;h:commandButton&nbsp;...&nbsp;action="#{someBean.someMethod}"/&gt;.&nbsp;When&nbsp;the&nbsp;button&nbsp;is&nbsp;pressed,&nbsp;the&nbsp;bean&nbsp;named&nbsp;someBean&nbsp;is&nbsp;instantiated&nbsp;(assuming&nbsp;request&nbsp;scope),&nbsp;setter&nbsp;methods&nbsp;corresponding&nbsp;to&nbsp;the&nbsp;h:inputBlah&nbsp;elements&nbsp;are&nbsp;run,&nbsp;validation&nbsp;occurs,&nbsp;and&nbsp;then&nbsp;someMethod&nbsp;is&nbsp;executed.&nbsp;This&nbsp;is&nbsp;the&nbsp;same&nbsp;as&nbsp;in&nbsp;JSF&nbsp;1.x,&nbsp;except&nbsp;that&nbsp;the&nbsp;managed&nbsp;bean&nbsp;name&nbsp;(someBean)&nbsp;can&nbsp;be&nbsp;derived&nbsp;from&nbsp;the&nbsp;bean&nbsp;class&nbsp;name&nbsp;(SomeBean).&nbsp;But&nbsp;now,&nbsp;if&nbsp;someMethod&nbsp;returns&nbsp;"foo"&nbsp;and&nbsp;"bar",&nbsp;and&nbsp;there&nbsp;are&nbsp;no&nbsp;explicit&nbsp;navigation&nbsp;rules&nbsp;in&nbsp;faces-config.xml&nbsp;for&nbsp;those&nbsp;outcomes,&nbsp;then&nbsp;JSF&nbsp;will&nbsp;assume&nbsp;that&nbsp;they&nbsp;correspond&nbsp;to&nbsp;foo.xhtml&nbsp;and&nbsp;bar.xhtml&nbsp;(from&nbsp;the&nbsp;same&nbsp;folder&nbsp;as&nbsp;form.xhtml),&nbsp;respectively.&nbsp;For&nbsp;example,&nbsp;in&nbsp;the&nbsp;this&nbsp;sample&nbsp;bean,&nbsp;the&nbsp;outcomes&nbsp;correspond&nbsp;to&nbsp;accepted.xhtml&nbsp;and&nbsp;rejected.xhtml.&nbsp;In&nbsp;a&nbsp;later&nbsp;section&nbsp;on&nbsp;page&nbsp;navigation,&nbsp;I&nbsp;will&nbsp;argue&nbsp;that&nbsp;explicit&nbsp;navigation&nbsp;rules&nbsp;are&nbsp;probably&nbsp;what&nbsp;you&nbsp;will&nbsp;use&nbsp;in&nbsp;real&nbsp;projects,&nbsp;but&nbsp;the&nbsp;implicit&nbsp;navigation&nbsp;lets&nbsp;you&nbsp;get&nbsp;your&nbsp;app&nbsp;up&nbsp;and&nbsp;running&nbsp;more&nbsp;quickly,&nbsp;and&nbsp;is&nbsp;particularly&nbsp;convenient&nbsp;for&nbsp;test&nbsp;apps&nbsp;where&nbsp;you&nbsp;just&nbsp;want&nbsp;to&nbsp;experiment&nbsp;with&nbsp;some&nbsp;particular&nbsp;JSF&nbsp;2&nbsp;feature.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">你可以使用缺省的结果页面映射。调用<span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">的方法的返回值将成为默认的目标：&nbsp;如返回值</span><span style="font-family:Consolas;">foo</span><span style="font-family:宋体;">，则默认目标为</span><span style="font-family:Consolas;">foo.xhtml</span></span></p>
<p></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';color:#000000;font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">You&nbsp;can&nbsp;usually&nbsp;use&nbsp;#{myBean.myProperty}&nbsp;instead&nbsp;of&nbsp;&lt;h:outputText&nbsp;value="#{myBean.myProperty}"/&gt;.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">If&nbsp;you&nbsp;don't&nbsp;need&nbsp;any&nbsp;fancy&nbsp;options,&nbsp;the&nbsp;first&nbsp;form&nbsp;is&nbsp;much&nbsp;more&nbsp;concise.&nbsp;Both&nbsp;forms&nbsp;escape&nbsp;HTML&nbsp;characters,&nbsp;and&nbsp;thus&nbsp;can&nbsp;be&nbsp;used&nbsp;for&nbsp;properties&nbsp;containing&nbsp;user&nbsp;input.&nbsp;You&nbsp;only&nbsp;need&nbsp;h:outputText&nbsp;when&nbsp;you&nbsp;need&nbsp;escape="false"&nbsp;or&nbsp;want&nbsp;to&nbsp;compute&nbsp;the&nbsp;render&nbsp;property&nbsp;or&nbsp;need&nbsp;to&nbsp;assign&nbsp;an&nbsp;id&nbsp;or&nbsp;want&nbsp;use&nbsp;another&nbsp;less-common&nbsp;feature&nbsp;of&nbsp;h:outputText.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">你可以经常使用：<span style="font-family:Consolas;">#{myBean.myProperty}&nbsp;</span><span style="font-family:宋体;">替代&nbsp;</span><span style="font-family:Consolas;">&lt;h:outputText&nbsp;value="#{myBean.myProperty}"/&gt;</span><span style="font-family:宋体;">。如果没有任何特殊的选择，使用前者更为简洁。</span></span></p>
<p></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';color:#000000;font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">You&nbsp;can&nbsp;easily&nbsp;Ajaxify&nbsp;your&nbsp;application.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">Add&nbsp;xmlns:f="http://java.sun.com/jsf/core"&nbsp;to&nbsp;the&nbsp;page&nbsp;header.&nbsp;Inside&nbsp;the&nbsp;start&nbsp;and&nbsp;end&nbsp;tags&nbsp;for&nbsp;h:commandButton,&nbsp;put&nbsp;&lt;f:ajax&nbsp;execute="@form"&nbsp;render="resultId"/&gt;.&nbsp;Then,&nbsp;also&nbsp;have&nbsp;&lt;h:outputText&nbsp;value="#{myBean.myProperty}"&nbsp;id="resultId"/&gt;.&nbsp;This&nbsp;means&nbsp;that&nbsp;when&nbsp;the&nbsp;button&nbsp;is&nbsp;pressed,&nbsp;all&nbsp;the&nbsp;form&nbsp;elements&nbsp;are&nbsp;sent&nbsp;to&nbsp;the&nbsp;server&nbsp;and&nbsp;executed&nbsp;normally.&nbsp;Then&nbsp;the&nbsp;action&nbsp;controller&nbsp;method&nbsp;is&nbsp;executed&nbsp;normally.&nbsp;Then,&nbsp;the&nbsp;value&nbsp;of&nbsp;getMyProperty&nbsp;is&nbsp;computed&nbsp;and&nbsp;sent&nbsp;back&nbsp;to&nbsp;the&nbsp;server.&nbsp;JavaScript&nbsp;receives&nbsp;the&nbsp;value&nbsp;and&nbsp;inserts&nbsp;it&nbsp;into&nbsp;the&nbsp;current&nbsp;page&nbsp;in&nbsp;the&nbsp;place&nbsp;where&nbsp;the&nbsp;h:outputText&nbsp;element&nbsp;initially&nbsp;was.&nbsp;A&nbsp;later&nbsp;section&nbsp;covers&nbsp;the&nbsp;Ajax&nbsp;support&nbsp;in&nbsp;detail.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">你可以非常容易的<span style="font-family:Consolas;">Ajax</span><span style="font-family:宋体;">化你的应用。</span></span></p>
<p></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';color:#000000;font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">Mere&nbsp;mortals&nbsp;can&nbsp;build&nbsp;custom&nbsp;components.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">In&nbsp;JSF&nbsp;1.x,&nbsp;the&nbsp;existence&nbsp;of&nbsp;an&nbsp;API&nbsp;for&nbsp;custom&nbsp;components&nbsp;was&nbsp;a&nbsp;real&nbsp;boon.&nbsp;Because&nbsp;of&nbsp;it,&nbsp;a&nbsp;whole&nbsp;market&nbsp;for&nbsp;third-party&nbsp;component&nbsp;libraries&nbsp;developed,&nbsp;with&nbsp;PrimeFaces,&nbsp;RichFaces,&nbsp;IceFaces,&nbsp;Tomahawk,&nbsp;ADF,&nbsp;and&nbsp;Web&nbsp;Galileo&nbsp;being&nbsp;notable&nbsp;libraries.&nbsp;However,&nbsp;the&nbsp;API&nbsp;was&nbsp;so&nbsp;complex&nbsp;that&nbsp;it&nbsp;was&nbsp;more&nbsp;trouble&nbsp;than&nbsp;it&nbsp;was&nbsp;worth&nbsp;for&nbsp;most&nbsp;ordinary&nbsp;JSF&nbsp;programmers.&nbsp;Now,&nbsp;there&nbsp;is&nbsp;a&nbsp;very&nbsp;easy-to-use&nbsp;facelets-based&nbsp;(rather&nbsp;than&nbsp;Java-based)&nbsp;method&nbsp;for&nbsp;building&nbsp;simple&nbsp;and&nbsp;medium-complex&nbsp;components.&nbsp;This&nbsp;is&nbsp;somewhat&nbsp;analogous&nbsp;to&nbsp;the&nbsp;tag-file&nbsp;way&nbsp;of&nbsp;building&nbsp;JSP&nbsp;custom&nbsp;tag&nbsp;libaries,&nbsp;but&nbsp;even&nbsp;simpler&nbsp;and&nbsp;even&nbsp;more&nbsp;powerful.&nbsp;A&nbsp;later&nbsp;section&nbsp;covers&nbsp;composite&nbsp;components&nbsp;in&nbsp;detail.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">简化了自定义组件的构建</span></p>
<p></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';color:#000000;font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">There&nbsp;is&nbsp;a&nbsp;powerful&nbsp;and&nbsp;relatively&nbsp;easy&nbsp;to&nbsp;use&nbsp;page&nbsp;templating&nbsp;library&nbsp;(better&nbsp;than&nbsp;Tiles!).&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">JSP&nbsp;always&nbsp;had&nbsp;jsp:include,&nbsp;but&nbsp;it&nbsp;lacked&nbsp;a&nbsp;serious&nbsp;library&nbsp;for&nbsp;building&nbsp;page&nbsp;templates,&nbsp;sub-templates,&nbsp;and&nbsp;concrete&nbsp;pages&nbsp;built&nbsp;upon&nbsp;templates.&nbsp;However,&nbsp;most&nbsp;modern&nbsp;Web&nbsp;apps&nbsp;have&nbsp;many&nbsp;similar-looking&nbsp;pages,&nbsp;so&nbsp;templating&nbsp;is&nbsp;a&nbsp;must.&nbsp;JSF&nbsp;2&nbsp;has&nbsp;a&nbsp;well-thought-out,&nbsp;extensible,&nbsp;and&nbsp;moderately&nbsp;easy-to-use&nbsp;templating&nbsp;framework&nbsp;that&nbsp;is&nbsp;arguably&nbsp;even&nbsp;better&nbsp;than&nbsp;Apache&nbsp;Tiles&nbsp;on&nbsp;which&nbsp;it&nbsp;was&nbsp;loosely&nbsp;based.&nbsp;A&nbsp;later&nbsp;section&nbsp;covers&nbsp;page&nbsp;templating&nbsp;in&nbsp;detail.&nbsp;</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">提供了一个强大的易于使用的页面模板库（比<span style="font-family:Consolas;">Tiles</span><span style="font-family:宋体;">更好）</span></span></p>]]></description>
	<pubDate>Fri, 28 Oct 2011 19:12:21 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=6</guid>

</item>
<item>
	<title>第二节：JSF 2.0: 安装,配置,开始</title>
	<link>http://www.java-time.com/?post=5</link>
	<description><![CDATA[<p><span style="font-family:'宋体';font-size:10.5pt;">第二节：<span style="font-family:'Times New Roman';"><span style="font-family:宋体;">JSF 2.0: 安装,配置,开始</span></span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">本节主题</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Getting&nbsp;required&nbsp;software&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Installing&nbsp;Java&nbsp;SE&nbsp;6&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Installing&nbsp;Eclipse&nbsp;(Java&nbsp;EE&nbsp;version)&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Installing&nbsp;a&nbsp;server&nbsp;for&nbsp;JSF2.0</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Tomcat&nbsp;6&nbsp;or&nbsp;7&nbsp;(also&nbsp;needs&nbsp;jsf-api.jar&nbsp;and&nbsp;jsf-impl.jar)&nbsp;&nbsp;or&nbsp;&nbsp;Any&nbsp;Java&nbsp;EE&nbsp;6&nbsp;server&nbsp;(e.g.,&nbsp;Glassfish&nbsp;3)&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Testing&nbsp;projects&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Importing&nbsp;and&nbsp;testing&nbsp;an&nbsp;existing&nbsp;JSF&nbsp;2.0&nbsp;project&nbsp;</span></span></p>
<p style="text-indent:21pt;margin-left:21pt;"><span style="font-family:'宋体';font-size:10.5pt;">Deploying&nbsp;onoTomcat&nbsp;and&nbsp;Glassfish&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Making&nbsp;your&nbsp;own&nbsp;JSF&nbsp;2.0&nbsp;project&nbsp;</span></span></p>
<p style="text-indent:21pt;margin-left:21pt;"><span style="font-family:'宋体';font-size:10.5pt;">基本特点一窥<span style="font-family:'Times New Roman';">Sneak&nbsp;preview&nbsp;of&nbsp;basic&nbsp;features</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Summary&nbsp;of&nbsp;code&nbsp;in&nbsp;jsf-test&nbsp;project</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">运行<span style="font-family:'Times New Roman';">JSF2.0</span><span style="font-family:宋体;">系统要求</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Java&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;如果运行<span style="font-family:'Times New Roman';">Tomcat&nbsp;6,&nbsp;Java&nbsp;5</span><span style="font-family:宋体;">或更高版本</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;如果<span style="font-family:'Times New Roman';">Tomcat&nbsp;7&nbsp;or&nbsp;Glassfish&nbsp;3,&nbsp;Java&nbsp;6</span><span style="font-family:宋体;">或更高版本&nbsp;</span></span></p>
<p><span style="font-style:italic;font-family:'宋体';color:#ff0000;font-size:10.5pt;">本教程使用<span style="font-family:'Times New Roman';">Tomcat&nbsp;</span><span style="font-family:宋体;">和</span><span style="font-family:'Times New Roman';">Java&nbsp;6&nbsp;</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">A&nbsp;server&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;只要支持<span style="font-family:'Times New Roman';">servlets&nbsp;2.5</span><span style="font-family:宋体;">更高版本&nbsp;</span><span style="font-family:'Times New Roman';">(e.g.,&nbsp;Tomcat&nbsp;6&nbsp;or&nbsp;7)&nbsp;</span><span style="font-family:宋体;">，并且需要两个</span><span style="font-family:'Times New Roman';">JAR&nbsp;</span><span style="font-family:宋体;">文件</span><span style="font-family:'Times New Roman';">(jsf-api.jar&nbsp;</span><span style="font-family:宋体;">和</span><span style="font-family:'Times New Roman';">jsf-impl.jar)</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">另外如果需要使用<span style="font-family:'Times New Roman';">ui:repeat</span><span style="font-family:宋体;">变迁，就需要</span><span style="font-family:'Times New Roman';">JSTL&nbsp;1.2&nbsp;JAR</span><span style="font-family:宋体;">文件&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">JSF&nbsp;2.0<span style="font-family:宋体;">也可以运行在</span><span style="font-family:'Times New Roman';">Google&nbsp;cloud&nbsp;server&nbsp;(</span><span style="font-family:宋体;">使用</span><span style="font-family:'Times New Roman';">Jetty)&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;只要支持<span style="font-family:'Times New Roman';">Java&nbsp;EE&nbsp;6&nbsp;(e.g.,&nbsp;Glassfish&nbsp;3,&nbsp;JBoss&nbsp;6,&nbsp;WebLogic&nbsp;11g)&nbsp;</span><span style="font-family:宋体;">，均内置支持</span><span style="font-family:'Times New Roman';">JSF&nbsp;2.0&nbsp;&amp;&nbsp;JSTL&nbsp;1.2&nbsp;</span></span></p>
<p><span style="font-style:italic;font-family:'宋体';color:#ff0000;font-size:10.5pt;">教程所有的例子可以运行在<span style="font-family:'Times New Roman';">Tomcat&nbsp;6,&nbsp;Tomcat&nbsp;7,&nbsp;&amp;&nbsp;Glassfish&nbsp;3&nbsp;</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">An&nbsp;IDE&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;可选，但是强烈建议<span style="font-family:'Times New Roman';">.&nbsp;</span></span></p>
<p><span style="font-style:italic;font-family:'宋体';color:#ff0000;font-size:10.5pt;">本教程使用<span style="font-family:'Times New Roman';">Eclipse&nbsp;3.6,&nbsp;</span><span style="font-family:宋体;">默认支持</span><span style="font-family:'Times New Roman';">JSF&nbsp;2&nbsp;</span><span style="font-family:宋体;">（</span><span style="font-family:'Times New Roman';">Eclipse&nbsp;IDE&nbsp;for&nbsp;Java&nbsp;EE&nbsp;Developers</span><span style="font-family:宋体;">）</span></span></p>
<p></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">安装配置过程</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">1、</span><span style="font-family:'宋体';font-size:10.5pt;">安装<span style="font-family:'Times New Roman';">Java6 </span><span style="font-family:宋体;">略</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">2、</span><span style="font-family:'宋体';font-size:10.5pt;">安装<span style="font-family:'Times New Roman';">Tomcat&nbsp;6</span></span><span style="font-family:'宋体';font-size:10.5pt;"> </span><span style="font-family:'宋体';font-size:10.5pt;">略</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">3、</span><span style="font-family:'宋体';font-size:10.5pt;">安装&nbsp;<span style="font-family:'Times New Roman';">Eclipse3.6&nbsp;</span></span><span style="font-style:italic;font-family:'宋体';color:#ff0000;font-size:10.5pt;">Eclipse&nbsp;IDE&nbsp;for&nbsp;Java&nbsp;EE&nbsp;Developers</span><span style="font-family:'宋体';font-size:10.5pt;"> </span><span style="font-family:'宋体';font-size:10.5pt;">略，并且在<span style="font-family:'Times New Roman';">Eclipse</span><span style="font-family:宋体;">中添加</span><span style="font-family:'Times New Roman';">Server&nbsp;tomcat6</span><span style="font-family:宋体;">，略</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">简单开始：</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">1、</span><span style="font-family:'宋体';font-size:10.5pt;">下载导入教程<span style="font-family:'Times New Roman';">blank</span><span style="font-family:宋体;">项目</span></span></p>
<p><span style="font-family:'Times New Roman';color:#0000ff;font-size:10.5pt;text-decoration:underline;">2、</span><span><a href="http://www.coreservlets.com/JSF-Tutorial/jsf2/code/jsf-blank.zip"><span style="font-family:'Times New Roman';color:#0000ff;font-size:10.5pt;text-decoration:underline;">jsf-blank.zip</span></a></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">3、</span><span style="font-family:'宋体';font-size:10.5pt;">解压缩，导入<span style="font-family:'Times New Roman';">Eclipse</span></span></p>
<a id="ematt:4" href="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/25db525d5887bdb26b5b37b696526dcb20111028182648.png" target="_blank"><img border="0" alt="点击查看原图" src="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/25db525d5887bdb26b5b37b696526dcb20111028182648.png" /></a> <p></p>
<p>&nbsp;</p>
<p><span style="font-family:'宋体';font-size:10.5pt;">更复杂的构建过程不做描述。</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">添加项目到<span style="font-family:'Times New Roman';">Server</span></span></p>
<a id="ematt:5" href="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/4dbc79fbd988a0c6413b26dd1f0d690220111028182648.png" target="_blank"><img border="0" alt="点击查看原图" src="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/thum-4dbc79fbd988a0c6413b26dd1f0d690220111028182648.png" /></a> <p></p>
<p>&nbsp;</p>
<p><span style="font-family:'宋体';font-size:10.5pt;">启动</span><span style="font-family:'宋体';font-size:10.5pt;">tomcat<span style="font-family:宋体;">，访问：</span><span style="font-family:'Times New Roman';"><a href="http://localhost:8080/jsf-blank/">http://localhost:8080/jsf-blank/</a></span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;"><a id="ematt:6" href="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/bc3c7807a7d6b88e71d65d79a316f56520111028182648.png" target="_blank"><img border="0" alt="点击查看原图" src="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/thum-bc3c7807a7d6b88e71d65d79a316f56520111028182648.png" /></a></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">大功告成！</span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">一个更复杂的例子：</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">1、</span><span style="font-family:'宋体';font-size:10.5pt;">下载：</span><span><a href="http://www.coreservlets.com/JSF-Tutorial/jsf2/code/jsf-test.zip"><span style="font-family:'Times New Roman';color:#0000ff;font-size:10.5pt;text-decoration:underline;">jsf-test.zip</span></a></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">2、</span><span style="font-family:'宋体';font-size:10.5pt;">导入</span><span style="font-family:'宋体';font-size:10.5pt;">Eclipse<span style="font-family:宋体;">项目</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">3、</span><span style="font-family:'宋体';font-size:10.5pt;">如图</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;"><a id="ematt:7" href="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/317775fcf6d46b579833bb2dd3e39eb220111028182649.png" target="_blank"><img border="0" alt="点击查看原图" src="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/317775fcf6d46b579833bb2dd3e39eb220111028182649.png" /></a></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;"><a id="ematt:8" href="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/6e5227e94f97bb20bdeab5bcdb97a0da20111028182649.png" target="_blank"><img border="0" alt="点击查看原图" src="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/thum-6e5227e94f97bb20bdeab5bcdb97a0da20111028182649.png" /></a></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;"><a id="ematt:9" href="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/f8c22e3d31cc3634ed99ccb0703df08720111028182649.png" target="_blank"><img border="0" alt="点击查看原图" src="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/thum-f8c22e3d31cc3634ed99ccb0703df08720111028182649.png" /></a></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;"><a id="ematt:10" href="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/8e4a934df6c903f73c472f2167d4d5fa20111028182649.png" target="_blank"><img border="0" alt="点击查看原图" src="http://xa0384.com.s66.snurl.cn/blog/content/uploadfile/201110/thum-8e4a934df6c903f73c472f2167d4d5fa20111028182649.png" /></a></span></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">说明：</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">1、</span><span style="font-family:'宋体';font-size:10.5pt;">html<span style="font-family:宋体;">开始标签中包含标签定义。。。相关标签需要在</span><span style="font-family:'Times New Roman';">web.xml</span><span style="font-family:宋体;">中做</span><span style="font-family:'Times New Roman';">url-pattern</span></span></p>
<p><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;">2、</span><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;">&lt;</span><span style="font-family:'Consolas';background:#c0c0c0;color:#3f7f7f;font-size:10.5pt;">h:head</span><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;">&gt;&lt;</span><span style="font-family:'Consolas';background:#c0c0c0;color:#3f7f7f;font-size:10.5pt;">h:</span><span style="font-family:'宋体';background:#c0c0c0;color:#3f7f7f;font-size:10.5pt;">body</span><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;">&gt;</span><span style="font-family:'宋体';background:#ffffff;color:#008080;font-size:10.5pt;">不是必须，但是推荐如此，可能在一些标签使用的时候会需要</span></p>
<p><span style="font-family:'宋体';background:#ffffff;color:#008080;font-size:10.5pt;">3、</span><span style="font-family:'宋体';background:#ffffff;color:#008080;font-size:10.5pt;">Input<span style="font-family:宋体;">元素在此例中被简化，后续会做进一步介绍</span></span></p>
<p><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;">4、</span><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;">&lt;</span><span style="font-family:'Consolas';background:#ffffff;color:#3f7f7f;font-size:10.5pt;">h:commandButton</span><span style="font-family:'Consolas';background:#ffffff;font-size:10.5pt;">&nbsp;</span><span style="font-family:'Consolas';background:#ffffff;color:#7f007f;font-size:10.5pt;">value</span><span style="font-family:'Consolas';background:#ffffff;color:#000000;font-size:10.5pt;">=</span><span style="font-style:italic;font-family:'Consolas';background:#ffffff;color:#2a00ff;font-size:10.5pt;">"Sign&nbsp;Me&nbsp;Up!"</span><span style="font-family:'Consolas';background:#ffffff;font-size:10.5pt;">&nbsp;</span><span style="font-family:'Consolas';background:#ffffff;color:#7f007f;font-size:10.5pt;">action</span><span style="font-family:'Consolas';background:#ffffff;color:#000000;font-size:10.5pt;">=</span><span style="font-style:italic;font-family:'Consolas';background:#ffffff;color:#2a00ff;font-size:10.5pt;">"#{healthPlanBean.signup}"</span><span style="font-family:'Consolas';background:#ffffff;color:#008080;font-size:10.5pt;">/&gt;</span><span style="font-family:'宋体';background:#ffffff;color:#008080;font-size:10.5pt;">&nbsp;&nbsp;和<span style="font-family:Consolas;">JSF1.x</span><span style="font-family:宋体;">中用法一致，但是</span><span style="font-family:Consolas;">JSF2</span><span style="font-family:宋体;">中自动</span><span style="font-family:Consolas;">Bean</span><span style="font-family:宋体;">由</span><span style="font-family:Consolas;">Java&nbsp;</span><span style="font-family:宋体;">类名自动产生。</span></span></p>
<p><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">package</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;coreservlets;</span></p>
<p><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">import</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;javax.faces.bean.*;</span></p>
<p><span style="font-family:'Consolas';color:#646464;font-size:10.5pt;">@ManagedBean</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">public</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;</span><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">class</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;HealthPlanBean&nbsp;{</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">public</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;String&nbsp;signup()&nbsp;{</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">if</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;(Math.</span><span style="font-style:italic;font-family:'Consolas';color:#000000;font-size:10.5pt;">random</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">()&nbsp;&lt;&nbsp;0.2)&nbsp;{</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">return</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">(</span><span style="font-family:'Consolas';color:#2a00ff;font-size:10.5pt;">"accepted"</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">);</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">else</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;{</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family:'Consolas';color:#7f0055;font-size:10.5pt;font-weight:bold;">return</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">(</span><span style="font-family:'Consolas';color:#2a00ff;font-size:10.5pt;">"rejected"</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">);</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">&nbsp;&nbsp;}</span></p>
<p><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">}</span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">相信大家都能够明白，一目了然。（点击</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">button<span style="font-family:宋体;">，直接调用了类</span></span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">HealthPlanBean&nbsp;</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">的方法</span><span style="font-family:'Consolas';color:#000000;font-size:10.5pt;">signup()</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">）</span><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">，简化吧，相对<span style="font-family:Consolas;">struts</span><span style="font-family:宋体;">，或者其他框架。。。。。</span></span></p>
<p></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">rejected.xhtml&nbsp;index.jsp&nbsp;accepted.xhtml&nbsp;<span style="font-family:宋体;">三个文件不在做介绍。。类似</span></span></p>
<p><span style="font-family:'宋体';color:#000000;font-size:10.5pt;">有感觉了吧，是不是有点儿小激动。。。。</span></p>]]></description>
	<pubDate>Fri, 28 Oct 2011 18:23:24 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=5</guid>

</item>
<item>
	<title>第一节：JSF 2.0: 简介及概述</title>
	<link>http://www.java-time.com/?post=4</link>
	<description><![CDATA[<p><span style="font-family:'宋体';font-size:10.5pt;">第一节：</span><span style="font-family:'Times New Roman';font-size:10.5pt;">JSF&nbsp;2.0:&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">简介及概述</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">本节主题</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">不同视角看</span><span style="font-family:'宋体';font-size:10.5pt;">JSF&nbsp;&nbsp;&nbsp; </span><span style="font-family:'宋体';font-size:10.5pt;">Different&nbsp;views&nbsp;of&nbsp;JSF</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">JSF<span style="font-family:宋体;">的利弊 </span></span><span style="font-family:'宋体';font-size:10.5pt;">Pros&nbsp;and&nbsp;cons&nbsp;of&nbsp;JSF</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Vs.&nbsp;standard&nbsp;servlet&nbsp;and&nbsp;JSP&nbsp;technology</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Vs.&nbsp;Apache&nbsp;Struts</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Vs.&nbsp;other&nbsp;Ajax&nbsp;approaches</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">New&nbsp;features&nbsp;in&nbsp;JSF&nbsp;2&nbsp;0&nbsp;?&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Vs.&nbsp;JSF&nbsp;1.x</span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">概述</span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">什么<span style="font-family:'Times New Roman';">JSF?</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">一组基于</span><span style="font-family:'宋体';font-size:10.5pt;">Web<span style="font-family:宋体;">的</span><span style="font-family:'Times New Roman';">GUI</span><span style="font-family:宋体;">控件和处理器&nbsp;</span></span><span style="font-family:'宋体';font-size:10.5pt;">A&nbsp;set&nbsp;of&nbsp;Web-based&nbsp;GUI&nbsp;controls&nbsp;and&nbsp;handlers?</span></p>
<p style="text-indent:21pt;"><span style="font-family:'宋体';font-size:10.5pt;">JSF<span style="font-family:宋体;">提供了许多预支的</span><span style="font-family:'Times New Roman';">HTML</span><span style="font-family:宋体;">原生</span><span style="font-family:'Times New Roman';">GUI</span><span style="font-family:宋体;">控件，连同处理这些控件的事件代码。</span></span><span style="font-family:'宋体';font-size:10.5pt;">JSF&nbsp;provides&nbsp;many&nbsp;prebuilt&nbsp;HTML-oriented&nbsp;GUI&nbsp;controls,&nbsp;along&nbsp;with&nbsp;code&nbsp;to&nbsp;handle&nbsp;their&nbsp;events</span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">一个设备独立的</span><span style="font-family:'宋体';font-size:10.5pt;">GUI<span style="font-family:宋体;">控件框架</span></span><span style="font-family:'宋体';font-size:10.5pt;">A&nbsp;device-independent&nbsp;GUI&nbsp;control&nbsp;framework?</span></p>
<p style="text-indent:21pt;"><span style="font-family:'宋体';font-size:10.5pt;">使用不同于</span><span style="font-family:'宋体';font-size:10.5pt;">HTML<span style="font-family:宋体;">的协议，</span><span style="font-family:'Times New Roman';">JSF</span><span style="font-family:宋体;">可以用于产生各种不同格式的图形。</span></span><span style="font-family:'宋体';font-size:10.5pt;">JSF&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;generate&nbsp;graphics&nbsp;in&nbsp;formats&nbsp;other&nbsp;than&nbsp;HTML,&nbsp;using&nbsp;protocols&nbsp;other&nbsp;than&nbsp;HTTP</span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">一个基于</span><span style="font-family:'宋体';font-size:10.5pt;">MVC<span style="font-family:宋体;">的</span><span style="font-family:'Times New Roman';">Web</span><span style="font-family:宋体;">应用程序框架&nbsp;</span></span><span style="font-family:'宋体';font-size:10.5pt;">An&nbsp;MVC-based&nbsp;Web&nbsp;app&nbsp;framework?</span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">一个</span><span style="font-family:'宋体';font-size:10.5pt;">Ajax<span style="font-family:宋体;">库 </span></span><span style="font-family:'宋体';font-size:10.5pt;">An&nbsp;Ajax&nbsp;library?</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">JSF2<span style="font-family:宋体;">提供了易于使用的</span><span style="font-family:'Times New Roman';">Ajax</span><span style="font-family:宋体;">支持，所以</span><span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">也可以看作是</span><span style="font-family:'Times New Roman';">JQuery</span><span style="font-family:宋体;">或</span><span style="font-family:'Times New Roman';">GWT</span><span style="font-family:宋体;">的一个替代品。</span></span><span style="font-family:'宋体';font-size:10.5pt;">JSF&nbsp;2.0&nbsp;provides&nbsp;very&nbsp;easy-to-use&nbsp;Ajax&nbsp;support.&nbsp;So,&nbsp;JSF&nbsp;2.0&nbsp;can&nbsp;beviewed&nbsp;as&nbsp;an&nbsp;alternative&nbsp;to&nbsp;jQuery&nbsp;or&nbsp;GWT.</span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">But&nbsp;Which&nbsp;is&nbsp;the&nbsp;proper&nbsp;way&nbsp;to&nbsp;view&nbsp;JSF<span style="font-family:宋体;">，这取决与你如何是使用</span><span style="font-family:'Times New Roman';">JSF</span><span style="font-family:宋体;">，一般来说，</span><span style="font-family:'Times New Roman';">1</span><span style="font-family:宋体;">、</span><span style="font-family:'Times New Roman';">3</span><span style="font-family:宋体;">两种方式是常见的方式。</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">议题&nbsp;<span style="font-family:'Times New Roman';">Issues</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">各种方案：&nbsp;传统<span style="font-family:'Times New Roman';">Web</span><span style="font-family:宋体;">应用</span></span></p>
<p style="text-indent:-21pt;margin-left:42pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">n&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">Servlets/JSP&nbsp;(with&nbsp;MVC)<span style="font-family:宋体;">、</span><span style="font-family:'Times New Roman';">Struts&nbsp;2.0</span></span></p>
<p style="text-indent:-21pt;margin-left:42pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">n&nbsp;</span></p>
<p style="text-indent:-21pt;margin-left:42pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">n&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">JSF2.0</span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">各种方案：&nbsp;基于<span style="font-family:'Times New Roman';">Ajax</span><span style="font-family:宋体;">的</span><span style="font-family:'Times New Roman';">Web</span><span style="font-family:宋体;">应用</span></span></p>
<p style="text-indent:-21pt;margin-left:42pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">n&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">在现有<span style="font-family:'Times New Roman';">Web&nbsp;App</span><span style="font-family:宋体;">中添加</span><span style="font-family:'Times New Roman';">jQuery</span><span style="font-family:宋体;">或者</span><span style="font-family:'Times New Roman';">Ext/JS</span><span style="font-family:宋体;">等</span></span></p>
<p style="text-indent:-21pt;margin-left:42pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">n&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">使用<span style="font-family:'Times New Roman';">GWT</span><span style="font-family:宋体;">完成所有事情，类似于</span><span style="font-family:'Times New Roman';">Swing</span><span style="font-family:宋体;">的方式</span></span></p>
<p style="text-indent:-21pt;margin-left:42pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">n&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">在页面中使用<span style="font-family:'Times New Roman';">JSF2.0</span><span style="font-family:宋体;">和</span><span style="font-family:'Times New Roman';">Ajax</span><span style="font-family:宋体;">标签</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">JSF2&nbsp;vs.&nbsp;JSF1.x</span></p>
<p style="text-indent:-21pt;margin-left:42pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">n&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">V2<span style="font-family:宋体;">和</span><span style="font-family:'Times New Roman';">v1</span><span style="font-family:宋体;">相比如何</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">JSF&nbsp;vs.&nbsp;Struts&nbsp;(Servlets/JSP&nbsp;\Spring&nbsp;MVC\Apache&nbsp;Wicket\Apache&nbsp;Tapestry)</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">后者并没有改变</span><span style="font-family:'宋体';font-size:10.5pt;">JSP<span style="font-family:宋体;">、</span><span style="font-family:'Times New Roman';">Servlet</span><span style="font-family:宋体;">的本质，同样需要纷繁的配置、代码、层次。</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">JSF<span style="font-family:宋体;">的优势</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">自定义<span style="font-family:'Times New Roman';">GUI</span><span style="font-family:宋体;">控件&nbsp;</span></span></p>
<p style="margin-left:21pt;"><span style="font-family:'宋体';font-size:10.5pt;">JSF<span style="font-family:宋体;">很容易进行自定义控件，而且目前已经有了大量的第三方</span><span style="font-family:'Times New Roman';">JSF&nbsp;GUI</span><span style="font-family:宋体;">控件，如：</span><span style="font-family:'Times New Roman';">PrimeFaces,&nbsp;JBoss&nbsp;RichFaces,&nbsp;Oracle&nbsp;ADF,&nbsp;IceFaces,&nbsp;Apache&nbsp;</span></span></p>
<p style="margin-left:21pt;"><span style="font-family:'宋体';font-size:10.5pt;">Tomahawk,&nbsp;Woodstock,&nbsp;Web&nbsp;Galileo,&nbsp;<span style="font-family:宋体;">…</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">事件处理机制：传统的<span style="font-family:'Times New Roman';">Web</span><span style="font-family:宋体;">均不能直接和</span><span style="font-family:'Times New Roman';">Java</span><span style="font-family:宋体;">代码交互，</span><span style="font-family:'Times New Roman';">JSF</span><span style="font-family:宋体;">提供了很好的事件机制</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">Managed&nbsp;beans<span style="font-family:宋体;">：极大的简化参数传递、类型转换、数据校验。。。</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">Integrated&nbsp;Ajax&nbsp;support<span style="font-family:宋体;">：标签化得</span><span style="font-family:'Times New Roman';">Ajax</span><span style="font-family:宋体;">支持，易于使用</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">JEE<span style="font-family:宋体;">官方组件，长期支持、发展</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">JSF<span style="font-family:宋体;">的缺点</span></span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">较大的学习曲线</span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">文档支持不足</span></p>
<p style="text-indent:-21pt;margin-left:21pt;"><span style="font-family:'Wingdings';font-size:10.5pt;">l&nbsp;</span><span style="font-family:'宋体';font-size:10.5pt;">缺少透明度：&nbsp;因为隐藏了底层，所以难以理解，不易于效评和调优</span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">JSF&nbsp;vs.&nbsp;<span style="font-family:宋体;">传统</span><span style="font-family:'Times New Roman';">JavaScript</span><span style="font-family:宋体;">库、</span><span style="font-family:'Times New Roman';">GWT</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">总的来说，由于<span style="font-family:'Times New Roman';">JSF2&nbsp;</span><span style="font-family:宋体;">内置的</span><span style="font-family:'Times New Roman';">Ajax</span><span style="font-family:宋体;">支持，使得</span><span style="font-family:'Times New Roman';">Ajax</span><span style="font-family:宋体;">的使用非常方便，这是进步。从技术发展的角度来看，</span><span style="font-family:'Times New Roman';">JavaScript</span><span style="font-family:宋体;">的使用也是越来越方便。</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">各种使用场景不同</span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Use&nbsp;traditional&nbsp;JavaScript&nbsp;library&nbsp;when:&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">You&nbsp;have&nbsp;existing&nbsp;app&nbsp;already&nbsp;built&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">You&nbsp;want&nbsp;to&nbsp;incrementally&nbsp;add&nbsp;rich&nbsp;GUIs/Ajax&nbsp;to&nbsp;it&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">UseUse&nbsp;GWTGWT&nbsp;when:when:&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">You&nbsp;are&nbsp;starting&nbsp;a&nbsp;new&nbsp;Web&nbsp;app&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">YouYou&nbsp;wantwant&nbsp;itit&nbsp;toto&nbsp;looklook&nbsp;likelike&nbsp;aa&nbsp;desktopdesktop&nbsp;appapp&nbsp;(no(no&nbsp;pagepage&nbsp;navnav))&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">You&nbsp;have&nbsp;complex&nbsp;client-server&nbsp;comms&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">Use&nbsp;JSF&nbsp;2.0&nbsp;when:&nbsp;</span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">You&nbsp;are&nbsp;starting&nbsp;a&nbsp;new&nbsp;Web&nbsp;app&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">It&nbsp;will&nbsp;be&nbsp;a&nbsp;combination&nbsp;of&nbsp;traditional&nbsp;form&nbsp;submissions&nbsp;and&nbsp;page&nbsp;naviigatition&nbsp;pllus&nbsp;richhGUIs/Aj/Ajax&nbsp;content</span></span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">JSF&nbsp;2.0&nbsp;vs.&nbsp;JSF&nbsp;1.x</span></p>
<p></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">新特性<span style="font-family:'Times New Roman';">vs.&nbsp;JSF&nbsp;1.x&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;巧妙的默认（约定）<span style="font-family:'Times New Roman';">Smart&nbsp;defaults&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;标注替代大量的<span style="font-family:'Times New Roman';">faces-config.xml&nbsp;entries&nbsp;&nbsp;Annotations&nbsp;to&nbsp;replace&nbsp;many&nbsp;faces-config.xml&nbsp;entries&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Ajax&nbsp;support&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Integrated&nbsp;support&nbsp;for&nbsp;facelets&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;简化自定义组件&nbsp;<span style="font-family:'Times New Roman';">Simpler&nbsp;custom&nbsp;components&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;更多的组件和校验器&nbsp;<span style="font-family:'Times New Roman';">More&nbsp;components&nbsp;and&nbsp;validators&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Support&nbsp;for&nbsp;Groovy&nbsp;</span></span></p>
<p><span style="font-family:'宋体';font-size:10.5pt;">–&nbsp;&nbsp;<span style="font-family:'Times New Roman';">Ability&nbsp;to&nbsp;bookmark&nbsp;results&nbsp;pages&nbsp;</span></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description>
	<pubDate>Fri, 28 Oct 2011 16:46:31 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=4</guid>

</item>
<item>
	<title>JSF2教程前言</title>
	<link>http://www.java-time.com/?post=2</link>
	<description><![CDATA[<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">2004<span style="font-family:宋体;">年</span><span style="font-family:'Times New Roman';">3</span><span style="font-family:宋体;">月份，</span><span style="font-family:'Times New Roman';">JCP</span><span style="font-family:宋体;">发布了</span><span style="font-family:'Times New Roman';">JSF1.0</span><span style="font-family:宋体;">规范，目标明确简单，简化当时盛行的</span><span style="font-family:'Times New Roman';">MVC</span><span style="font-family:宋体;">模式下的</span><span style="font-family:'Times New Roman';">Web</span><span style="font-family:宋体;">开发，提高开发、维护效率。</span></span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">7<span style="font-family:宋体;">年前，幸福与</span><span style="font-family:'Times New Roman';">JSF1.0</span><span style="font-family:宋体;">的发布，规范很美好，现实很残酷，</span><span style="font-family:'Times New Roman';">JSF1.0</span><span style="font-family:宋体;">并没有展示出足够的强大。</span></span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">2009<span style="font-family:宋体;">年</span><span style="font-family:'Times New Roman';">7</span><span style="font-family:宋体;">月</span><span style="font-family:'Times New Roman';">1</span><span style="font-family:宋体;">日，经过投票后的一段时间，</span><span style="font-family:'Times New Roman';">JSF2.0&nbsp;(JSR-314)</span><span style="font-family:宋体;">终于发布。</span><span style="font-family:'Times New Roman';">2</span><span style="font-family:宋体;">年多过去了，</span><span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">得到了众多厂商的支持，各种不同的</span><span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">的实现登上舞台。</span></span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">是时候了，静下心来，好好关注<span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">。</span></span></p>
<p></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">简要的看了很多<span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">的资料，包括：</span></span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">JavaServer&nbsp;Faces&nbsp;2.0,&nbsp;The&nbsp;Complete&nbsp;Reference</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">JavaServer?&nbsp;Faces&nbsp;Specification&nbsp;V2.1</span></p>
<p style="text-indent:21pt;"></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">无意间看到了一套老外的培训资料，觉得很不错，怦然心动，觉得要做一些事情，开始吧，谁让中文版的<span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">的资料目前还没有呢<em><span style="color:#e53333;">。（翻译过程中，简化了一些内容，有些简单的部分直接引用原文，尽力终于原文含义，无奈能力有限，难免有不足之处，还望谅解。</span><span style="color:#e53333;">）</span></em></span></span></p>
<p></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">课程目录：</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;01-JSF2-Overview</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;02-JSF2-Getting-Started</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;04-JSF2-Programming-Basics</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;05-JSF2-Managed-Beans-1</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;06-JSF2-Managed-Beans-2</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;07-JSF2-Page-Navigation</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;08-JSF2-Expression-Language</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;09-JSF2-Properties-Files</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;10-JSF2-Event-Handling</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;11-JSF2-Ajax</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;12-JSF2-Validation</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;13-JSF2-Looping</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;14-JSF2-Data-Tables</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;15-JSF2-Composite-Components</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;16-JSF2-Facelets-Templating</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;17-JSF2-View-Params</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;18-JSF2-Using-Spring</span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">&nbsp;19-JSF2-Whirlwind-Tour</span></p>
<p></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">JSF2.0<span style="font-family:宋体;">系列教程概述</span></span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">对于大多数类型的应用<span style="font-family:'Times New Roman';">,</span><span style="font-family:宋体;">构建基于</span><span style="font-family:'Times New Roman';">Java</span><span style="font-family:宋体;">的</span><span style="font-family:'Times New Roman';">Web</span><span style="font-family:宋体;">应用，</span><span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">是现在被推荐的方式，用于取代较早并低层次的</span><span style="font-family:'Times New Roman';">servlet</span><span style="font-family:宋体;">和</span><span style="font-family:'Times New Roman';">JSP</span><span style="font-family:宋体;">。本教程通篇使用</span><span style="font-family:'Times New Roman';">Mojarra</span><span style="font-family:宋体;">的</span><span style="font-family:'Times New Roman';">JSF</span><span style="font-family:宋体;">实现和</span><span style="font-family:'Times New Roman';">Apache&nbsp;Tomcat6</span><span style="font-family:宋体;">介绍</span><span style="font-family:'Times New Roman';">JSF2,</span><span style="font-family:宋体;">但是所有的代码应可以使用</span><span style="font-family:'Times New Roman';">Apache&nbsp;MyFaces&nbsp;2.0(</span><span style="font-family:宋体;">在任何</span><span style="font-family:'Times New Roman';">servlet&nbsp;2.5</span><span style="font-family:宋体;">容器</span><span style="font-family:'Times New Roman';">)</span><span style="font-family:宋体;">或任何</span><span style="font-family:'Times New Roman';">Java&nbsp;EE&nbsp;6</span><span style="font-family:宋体;">服务器很好的运行。</span><span style="font-family:'Times New Roman';">JSF2</span><span style="font-family:宋体;">机会在方方面面优于</span><span style="font-family:'Times New Roman';">JSF1,</span><span style="font-family:宋体;">更强大、更容易使用。</span></span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">练习是学习的关键所在<span style="font-family:'Times New Roman';">,</span><span style="font-family:宋体;">所以我强烈建议你尝试一些练习在每一节你看解决方法之前。</span></span></p>
<p style="text-indent:21pt;"><span style="font-family:'Times New Roman';font-size:10.5pt;">这些教程都源自<span style="font-family:'Times New Roman';"><a href="http://courses.coreservlets.com/jsf-training.html" target="_blank">Marty&nbsp;Hall's&nbsp;world-renowned&nbsp;live&nbsp;JSF&nbsp;2.0&nbsp;training&nbsp;courses</a></span><span style="font-family:宋体;">。</span></span></p>]]></description>
	<pubDate>Mon, 24 Oct 2011 15:25:58 +0000</pubDate>
	<author>realwangx</author>
	<guid>http://www.java-time.com/?post=2</guid>

</item></channel>
</rss>
