﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-itVincent Blog - Java Working Fun!-随笔分类-JSF</title><link>http://www.blogjava.net/itvincent/category/17599.html</link><description>喜欢Java,热爱技术</description><language>zh-cn</language><lastBuildDate>Fri, 27 Apr 2007 07:45:35 GMT</lastBuildDate><pubDate>Fri, 27 Apr 2007 07:45:35 GMT</pubDate><ttl>60</ttl><item><title>JSF html标签(1)</title><link>http://www.blogjava.net/itvincent/archive/2007/04/27/114074.html</link><dc:creator>itVincent</dc:creator><author>itVincent</author><pubDate>Fri, 27 Apr 2007 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/itvincent/archive/2007/04/27/114074.html</guid><wfw:comment>http://www.blogjava.net/itvincent/comments/114074.html</wfw:comment><comments>http://www.blogjava.net/itvincent/archive/2007/04/27/114074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/itvincent/comments/commentRss/114074.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/itvincent/services/trackbacks/114074.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Jsf提供了一套标准的html标签。可以让您搭配JSF组件输出HTML文件，标准的HTML Renderer Kit主要包括了......&nbsp;&nbsp;<a href='http://www.blogjava.net/itvincent/archive/2007/04/27/114074.html'>阅读全文</a><img src ="http://www.blogjava.net/itvincent/aggbug/114074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/itvincent/" target="_blank">itVincent</a> 2007-04-27 14:23 <a href="http://www.blogjava.net/itvincent/archive/2007/04/27/114074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF技术研究——第一个JSF程序</title><link>http://www.blogjava.net/itvincent/archive/2006/12/26/90139.html</link><dc:creator>itVincent</dc:creator><author>itVincent</author><pubDate>Tue, 26 Dec 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/itvincent/archive/2006/12/26/90139.html</guid><wfw:comment>http://www.blogjava.net/itvincent/comments/90139.html</wfw:comment><comments>http://www.blogjava.net/itvincent/archive/2006/12/26/90139.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/itvincent/comments/commentRss/90139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/itvincent/services/trackbacks/90139.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开门第一篇，当然是要做一个JSF程序，增强点信心和兴趣吧，学习JSF第一步&nbsp;&nbsp;<a href='http://www.blogjava.net/itvincent/archive/2006/12/26/90139.html'>阅读全文</a><img src ="http://www.blogjava.net/itvincent/aggbug/90139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/itvincent/" target="_blank">itVincent</a> 2006-12-26 17:05 <a href="http://www.blogjava.net/itvincent/archive/2006/12/26/90139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF技术研究——几个JSF流行名词的解释</title><link>http://www.blogjava.net/itvincent/archive/2006/12/21/89224.html</link><dc:creator>itVincent</dc:creator><author>itVincent</author><pubDate>Thu, 21 Dec 2006 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/itvincent/archive/2006/12/21/89224.html</guid><wfw:comment>http://www.blogjava.net/itvincent/comments/89224.html</wfw:comment><comments>http://www.blogjava.net/itvincent/archive/2006/12/21/89224.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/itvincent/comments/commentRss/89224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/itvincent/services/trackbacks/89224.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 解答一个初学者的困惑，大家听得比较多的是，JSF1.1，JSF1.2，myfaces,oracle ADF,ajax4jsf，facelets,它们究竟是什么，有什么关系呢？<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/itvincent/archive/2006/12/21/89224.html'>阅读全文</a><img src ="http://www.blogjava.net/itvincent/aggbug/89224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/itvincent/" target="_blank">itVincent</a> 2006-12-21 10:55 <a href="http://www.blogjava.net/itvincent/archive/2006/12/21/89224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF虽然易学易用，但中途麻烦多多</title><link>http://www.blogjava.net/itvincent/archive/2006/11/11/80539.html</link><dc:creator>itVincent</dc:creator><author>itVincent</author><pubDate>Sat, 11 Nov 2006 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/itvincent/archive/2006/11/11/80539.html</guid><wfw:comment>http://www.blogjava.net/itvincent/comments/80539.html</wfw:comment><comments>http://www.blogjava.net/itvincent/archive/2006/11/11/80539.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/itvincent/comments/commentRss/80539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/itvincent/services/trackbacks/80539.html</trackback:ping><description><![CDATA[   最近研究JSF苦啊,从JSF RI 1.1到MyFaces1.5,再到facelets,还没整合到Ajax的部分,已经很多麻烦了,总有很多奇怪的错误,原因有因为包的版本的问题,包的冲突的问题,包之间版本不匹配的问题.配置文件也由于一点点的不同,但配置时不报错,却在运行的时候显示出跟配置无关的错误,还有一个因为设置了别的tomcat端口而出现的异常,而且最重要的是它的稳定性,我们做的成功的应用放到别人的机器上用就会出现问题,所有这些都影响了对JSF的学习与使用。<br />   单个的路难走，整合的路更难走。幸好今天终于把exadel studio4.0给下载了，里面的工具对JSF支持很好。<br />   由于这段时间很忙，所以要有些时间，总结技术问题之后再发上来。<img src ="http://www.blogjava.net/itvincent/aggbug/80539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/itvincent/" target="_blank">itVincent</a> 2006-11-11 09:29 <a href="http://www.blogjava.net/itvincent/archive/2006/11/11/80539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从JSF1.2的例子,发现Tomcat版本兼容的问题</title><link>http://www.blogjava.net/itvincent/archive/2006/11/02/78591.html</link><dc:creator>itVincent</dc:creator><author>itVincent</author><pubDate>Thu, 02 Nov 2006 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/itvincent/archive/2006/11/02/78591.html</guid><wfw:comment>http://www.blogjava.net/itvincent/comments/78591.html</wfw:comment><comments>http://www.blogjava.net/itvincent/archive/2006/11/02/78591.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/itvincent/comments/commentRss/78591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/itvincent/services/trackbacks/78591.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从官网下的</span>
				<span lang="EN-US">JSF1.2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面的例子一直不能在我的</span>
				<span lang="EN-US">Tomcat<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">5.5.17</st1:chsdate></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下运行</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但是我自己做的程序没有出现问题，后来上网找到原来是</span>
				<span lang="EN-US">Tomcat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本问题。</span>
				<span lang="EN-US">JSF1.2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用的是</span>
				<span lang="EN-US">JSP2.1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标准</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从下面列表中可看出</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要运行</span>
				<span lang="EN-US">JSF1.2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要</span>
				<span lang="EN-US">6.0.x</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				<span lang="EN-US">JSF1.2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的例子中用到</span>
				<span lang="EN-US">JSP1.2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">API</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，所以在我的</span>
				<span lang="EN-US">Tomcat5</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行就会报错，而我的程序用的是</span>
				<span lang="EN-US">facelets</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有用到</span>
				<span lang="EN-US">JSP1.2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">API</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所以没有问题，但是</span>
				<span lang="EN-US">deploy</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候会报出一些关于</span>
				<span lang="EN-US">jsp</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的警告(2006-11-2 9:34:23 com.sun.faces.config.ConfigureListener isJspTwoOne<br />警告: Incorrect JSP version found, method getJspApplicationContext does not exist.)，也是这样的原因。<br />   所以要在</span>
				<span lang="EN-US">Tomcat5</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下运行</span>
				<span lang="EN-US">JSF</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，为了稳定起见，应该使用</span>
				<span lang="EN-US">JSF1.1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本。现在用回JSF1.1,原来一些XML没有验证,和页面提交表单后,返回再提交会出现的丢失数据的问题也解决了（我之前的文章<a class="titlelink" id="Editor_Results_rprSelectionList_ctl02_Hyperlink1" href="/itvincent/archive/2006/11/01/78481.html"><font color="#000000">《javax.faces.STATE_SAVING_METHOD的设置问题</font></a>》 。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<table class="MsoNormalTable" style="mso-cellspacing: 1.5pt" cellpadding="0" border="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #039acc; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<b>
														<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Servlet/JSP Spec</span>
												</b>
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
												</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #039acc; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<b>
														<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">Apache Tomcat version</span>
												</b>
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
												</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 1">
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #a0ddf0; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">2.5/2.1</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #a0ddf0; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">6.0.x</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 2">
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #a0ddf0; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">2.4/2.0</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #a0ddf0; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">5.5.x</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 3">
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #a0ddf0; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">2.3/1.2</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #a0ddf0; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">4.1.x</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes">
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #a0ddf0; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">2.2/1.1</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: #eef2f5; PADDING-RIGHT: 0.75pt; BORDER-TOP: #eef2f5; PADDING-LEFT: 0.75pt; BACKGROUND: #a0ddf0; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #eef2f5; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #eef2f5" valign="top">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.3.x</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
<img src ="http://www.blogjava.net/itvincent/aggbug/78591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/itvincent/" target="_blank">itVincent</a> 2006-11-02 09:23 <a href="http://www.blogjava.net/itvincent/archive/2006/11/02/78591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javax.faces.STATE_SAVING_METHOD的设置问题</title><link>http://www.blogjava.net/itvincent/archive/2006/11/01/78481.html</link><dc:creator>itVincent</dc:creator><author>itVincent</author><pubDate>Wed, 01 Nov 2006 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/itvincent/archive/2006/11/01/78481.html</guid><wfw:comment>http://www.blogjava.net/itvincent/comments/78481.html</wfw:comment><comments>http://www.blogjava.net/itvincent/archive/2006/11/01/78481.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/itvincent/comments/commentRss/78481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/itvincent/services/trackbacks/78481.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
				<span lang="EN-US">javax.faces.STATE_SAVING_METHOD</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置为</span>
				<span lang="EN-US">server</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候（默认），发现点击浏览器</span>
				<span lang="EN-US">“</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后退</span>
				<span lang="EN-US">”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按钮会导致退回的页面不可用，重新提交的表单不生效，服务器端不刷新，但页面会跳转，必须刷新一次才能解决。</span>
				<span lang="EN-US">
						<br />
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我想到两个解决办法：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把</span>
				<span lang="EN-US">javax.faces.STATE_SAVING_METHOD</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设为</span>
				<span lang="EN-US">client</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以解决，但是客户端页面中会出现很长的隐藏信息，虽然不影响客户使用，但是页面会变得很冗长。而且看到有人说页面中夹入的</span>
				<span lang="EN-US">javascript</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打印的中文提示变成了乱码。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">faces-config.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-tab-count: 1">    </span>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-tab-count: 2">       </span>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean-name</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">hello</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;/</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean-name</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-tab-count: 2">       </span>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean-class</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-tab-count: 3">           </span>facelets.Hello</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-tab-count: 2">       </span>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;/</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean-class</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-tab-count: 2">       </span>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean-scope</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">session</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;/</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean-scope</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-tab-count: 1">    </span>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;/</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&lt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #3f7f7f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">managed-bean-scope</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">改为</span>
				<span lang="EN-US">session</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也可以解决，但例如新增修改是做在同一个页面的时候，之前做过修改操作，新增的时也会存在修改时的内容</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请教有什么方法可以更好的解决这个问题？</span>
		</p>
<img src ="http://www.blogjava.net/itvincent/aggbug/78481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/itvincent/" target="_blank">itVincent</a> 2006-11-01 15:43 <a href="http://www.blogjava.net/itvincent/archive/2006/11/01/78481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]用JSF和MyFaces上传文件</title><link>http://www.blogjava.net/itvincent/archive/2006/11/01/78472.html</link><dc:creator>itVincent</dc:creator><author>itVincent</author><pubDate>Wed, 01 Nov 2006 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/itvincent/archive/2006/11/01/78472.html</guid><wfw:comment>http://www.blogjava.net/itvincent/comments/78472.html</wfw:comment><comments>http://www.blogjava.net/itvincent/archive/2006/11/01/78472.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/itvincent/comments/commentRss/78472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/itvincent/services/trackbacks/78472.html</trackback:ping><description><![CDATA[
		<div class="title" twffan="done">
				<h2>用JSF和MyFaces上传文件</h2>
				<a href="http://www.matrix.org.cn/resource/article/43/user.shtml?userid=85935">RR00</a> 发表于 2005-08-31 00:12:00<br />作者:Andrei Cioroianu;RR00     来源:Onjava<br />评论数:1 点击数:4,703     投票总得分:5 投票总人次:1<br />关键字:JSF MyFaces Upload </div>
		<!-- end of div title -->
		<div class="summary" twffan="done">
				<div class="left" twffan="done">
				</div>
				<div class="center" twffan="done">
						<h4>摘要:</h4>用户可以很方便使用浏览器上传文件，但是当前的Java Web标准（如servlets, JSP, and JSF）并没有提供任何上传的功能。幸好第三方框架，比如 Apache Commons File Upload, Apache MyFaces, and Oracle ADF Faces，提供了简单的API和客户标签，实现了这个功能。文章的前半部分将介绍上传组件是如何工作的，在文章的后半部分，介绍了一个让用户通过浏览器上传文件的例子。 </div>
				<div class="right" twffan="done">
						<div class="help" twffan="done">
								<h4>工具箱</h4>
								<a href="http://www.matrix.org.cn/favorite.shtml?type=article&amp;title=%25E7%2594%25A8JSF%25E5%2592%258CMyFaces%25E4%25B8%258A%25E4%25BC%25A0%25E6%2596%2587%25E4%25BB%25B6&amp;url=resource%2Farticle%2F43%2F43703_JSF_MyFaces_Upload.html">本站收藏</a>
								<br />
								<a onclick="javascript:location.href='http://del.icio.us/post?&amp;url='+encodeURIComponent(location.href)+'&amp;title='+encodeURIComponent(document.title)" href="http://www.matrix.org.cn/resource/article/43/43703_JSF_MyFaces_Upload.html#">美味书签</a>
								<br />
								<a href="http://www.matrix.org.cn/resource/article/43/43703_JSF_MyFaces_Upload.html#avote">投票评分</a>
								<br />
								<a href="http://www.matrix.org.cn/resource/article/43/43703_JSF_MyFaces_Upload.html#areview">发表评论</a>
								<br />
								<a title="点击后直接粘贴即可" onclick="copyLink();" href="http://www.matrix.org.cn/resource/article/43/43703_JSF_MyFaces_Upload.html#">复制链接</a>
								<br />
						</div>
				</div>
		</div>
		<!-- end of summary line -->
		<div class="overflow" id="text" twffan="done">
				<center>
						<b>
								<span style="FONT-SIZE: 20px" twffan="done">用JSF和MyFaces上传文件</span>
						</b>
				</center>
				<br />
				<center>作者：Andrei Cioroianu</center>
				<br />
				<center>翻译：<span style="COLOR: purple" twffan="done"><a href="http://www.matrix.org.cn/user.shtml?username=RR00" target="_new">RR00</a></span></center>
				<br />
				<center>email:di_feng_ro@hotmail.com</center>
				<br />
				<br />
				<span style="COLOR: purple" twffan="done">版权声明</span>：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明<br />英文原文地址:<br /><a href="http://www.onjava.com/pub/a/onjava/2005/07/13/jsfupload.html" target="_new">http://<span id="TheWorldKeyWord" style="BACKGROUND: #ffff00; COLOR: #000000">www</span>.onjava.com/pub/a/onjava/2005/07/13/jsfupload.html</a><br />中文地址:<br /><a href="http://www.matrix.org.cn/resource/article/43/43703_JSF_MyFaces_Upload.html" target="_new">http://<span id="TheWorldKeyWord" style="BACKGROUND: #ffff00; COLOR: #000000">www</span>.matrix.org.cn/resource/article/43/43703_JSF_MyFaces_Upload.html</a><br />关键词： JSF MyFaces Upload<br /><br /><br /><br />用户可以很方便使用浏览器上传文件，但是当前的Java Web标准（如servlets, JSP, and JSF）并没有提供任何上传的功能。幸好第三方框架，比如 Apache Commons File Upload, Apache MyFaces, and Oracle ADF Faces，提供了简单的API和客户标签，实现了这个功能。文章的前半部分将介绍上传组件是如何工作的，你将看到MyFaces and Commons File Upload 的部分源码（实际上，前者采用的是后者的代码）。了解这些源码的内在机制将使我们更有效的使用这些框架，并且可以根据需要修改他们！在文章的后半部分，介绍了一个让用户通过浏览器上传文件的例子。<br /><br /><b><span style="FONT-SIZE: 16px" twffan="done">基于WEB的文件上传</span></b><br />“上传”这个词的使用比较广泛。一个web管理员在他的主页发布了一个文件，他可以说他上传了一个文件；当一个网络工程师创建了一个HTML form和一些脚本使普通用户可以通过浏览器上传文件，他说他实现了上传的功能。<br />这两种方式之中有些共同的地方，因为一个web管理员可以通过一个基于web的接口来发布文件（页面，图像，脚本等等）。那些免费提供个人主页的公司，比如yahoo，实现了基于web的文件上传功能，因为客户需要上传页面。这样任何人只要接入网络，就可以通过浏览器发布他的个人站点。但是，还有许多更好的方式让你发布你的网页内容，比如FTP或secure FTP。在这种情况下，你就需要一个对应的应用程序，比如FTP客户端，而不是浏览器来发布你的网站。<br /><br />这篇文章将从网络开发者的角度来讨论文件上传。一个基于web的mail应用程序，比如yahoo mail,实现了上传功能，这样用户才能发送信息和附件。另一个好的例子是一个job网站必须让你能够发送简历给招聘人员。在你的应用程序中，你可以对上传的文件作任何你想做的事情，比如把这些文件的内容储存到数据库中或者把他们当作附件发送出去。这篇文章的例子计算了上传文件的hash值。现在，让我们看看如何在一个web应用程序中实现上传功能。<br /><br />一个html表单包含一个或多个&lt;input type="file"&gt; 元素，这个元素将在页面上生成文件输入框，用户可以在这里填写文件路径。用户点击输入字段后面的浏览(browse)按钮后，会弹出一个对话框让用户选择路径：<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_31_000221_eqIVukESmm.gif" onload="javascript:imgLoad(this);" border="0" twffan="done" resized="0" /><br /><br />当用户点击表单的Sumbit按钮，浏览器对表单数据进行编码，其中包括文件的内容，名字，路径以及其他的表单参数。然后，浏览器把编码过的数据传递给web服务器，服务器再把这些数据传递给相应的页面，比如&lt;form&gt;标签里的action属性值。如果是java网络应用程序，action属性值可能是个servlet或者是个jsp页面。<br />因为默认的表单编码和get方法不适合上传文件，所以一个包含文件输入框的表单必须定义编码为multipart/form-data ，并且在&lt;form&gt;标签里使用POST方法：<br /><pre class="overflow">&lt;form enctype="multipart/form-data" method="POST" action="..."&gt;<br />    ...<br />    &lt;input type="file" name="..."&gt;<br />    ...<br />&lt;/form&gt;</pre><br /><br />但是，事情并不象看起来那么简单，实现了servlet and JSP 标准的应用服务器并没有被要求处理 multipart/form-data编码。所以你需要一个解析器来处理请求的输入流,比如Apache Commons File Upload组件，它是个java包，能从已编码的数据中读取出上传文件的内容。这个包的API很灵活，允许你把小文件存在内存里而大文件储存在磁盘上一个临时文件夹里。你不但可以定义大文件和小文件的界限，还可以定义上传文件所占空间的最大值。<br /><br />org.apache.commons.fileupload里有个DiskFileUpload类，它的parseRequest()函数获得一个HttpServletRequest，返回一个List，其中包含了org.apache.commons.fileupload.FileItem的实例。servlet请求的getInputStream()函数返回一个数据流，已编译的表单数据就是从这里读取出来的。FileItem很容易让人误解，因为这个接口的实例不仅包括上传文件,还有其他的请求参数。<br /><br />Commons File Upload 包提供的API可以解析数据，但是servlet请求的getParameter()函数和getParameterValues()函数却不能工作。因为这两个函数被运行在常用的输入框, 复选框, 单选按钮, 和下拉列表后面的标准JSF组件调用，所以这个问题需要解决。Servlets API提供的两个功能(filters和request wrappers) 可以解决这个问题。下面的章节描述了在没有破坏原有JSF结构的情况下，Apache MyFaces 如何实现了一个filter功能，从而添加了更多需要的支持。另外，MyFaces提供的API可以创建javaBean，和生成&lt;input type="file"&gt;元素的JSF组件相对应。<br /><br /><b><span style="FONT-SIZE: 16px" twffan="done">配置 JSF 和MyFaces Extensions</span></b><br />目前最主要的实现JSF规范的框架有JSF Reference Implementation (RI)以及Apache提供的MyFaces。虽然还有别的，但这两个是最流行的。很多开发者更倾向于JSF RI，因为这是来自于sun的官方产品。但MyFaces有一些有趣的扩展的功能，比如上传文件。如果你喜欢，你可以同时使用MyFaces的扩展功能和JSF RI。你只需要把myfaces-extensions.jar和JSF RI的jar文件以及 commons-fileupload-1.0.jar 放在web应用程序的WEB-INF/lib 目录下即可。下面是你需要的jar文件：<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_31_000513_aHBUokhKcp.jpg" onload="javascript:imgLoad(this);" border="0" twffan="done" resized="0" /><br /><br />org.apache.myfaces.component.html.util包的MultipartRequestWrapper类创建了MyFaces和Commons File Upload连接的桥梁。这个类继承了HttpServletRequestWrapper，重写了getParameterMap(), getParameterNames(), getParameter(), 和getParameterValues() 函数，所以他们能正确处理multipart/form-data 编码数据。另外，MultipartRequestWrapper提供的两个函数，getFileItem() 和getFileItems(),使你可以通过org.apache.commons.fileupload.FileItem 接口访问上传文件。<br /><br />MyFaces的 ExtensionsFilter 类在org.apache.myfaces.component.html.util 包里，当它发现multipart/form-data编码的时候，它会创建 MultipartRequestWrapper 的实例。所以你不需理会他是如何解析表单数据的，但是知道它是如何开始解析对你想要修改上传文件的处理方式是有用的。在一个传统的应用程序中，你只需要在web.xml描述符中配置好ExtensionsFilter ，它就能在JSF的FacesServlet之前截获HTTP请求：<br /><br /><pre class="overflow">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE web-app PUBLIC<br />    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />    "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />&lt;web-app&gt;<br />    &lt;context-param&gt;<br />        &lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt;<br />        &lt;param-value&gt;client&lt;/param-value&gt;<br />    &lt;/context-param&gt;<br />    &lt;servlet&gt;<br />        &lt;servlet-name&gt;FacesServlet&lt;/servlet-name&gt;<br />        &lt;servlet-class&gt;<br />            javax.faces.webapp.FacesServlet<br />        &lt;/servlet-class&gt;<br />        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />    &lt;/servlet&gt;<br />    &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;FacesServlet&lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;/faces/*&lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br />    &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;FacesServlet&lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;*.faces&lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br />    &lt;filter&gt;<br />        &lt;filter-name&gt;ExtensionsFilter&lt;/filter-name&gt;<br />        &lt;filter-class&gt;<br />            org.apache.myfaces.component.html.util.ExtensionsFilter<br />        &lt;/filter-class&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;uploadMaxFileSize&lt;/param-name&gt;<br />            &lt;param-value&gt;10m&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;uploadThresholdSize&lt;/param-name&gt;<br />            &lt;param-value&gt;100k&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />    &lt;/filter&gt;<br />    &lt;filter-mapping&gt;<br />        &lt;filter-name&gt;ExtensionsFilter&lt;/filter-name&gt;<br />        &lt;servlet-name&gt;FacesServlet&lt;/servlet-name&gt;<br />    &lt;/filter-mapping&gt;<br />    &lt;welcome-file-list&gt;<br />        &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />    &lt;/welcome-file-list&gt;<br />&lt;/web-app&gt;</pre><br /><br />前面例子中，filter的两个参数告诉MyFaces把小于100K的文件保存在内存中，而对于大于10M的文件则忽略。大小在uploadThresholdSize值和uploadMaxFileSize值之间的文件则作为临时文件存在硬盘上。如果你上传很大的文件，当前的MyFaces版本会忽略所有的表单数据，就好象你提交了一个空表单。如果你想把上传失败的消息告诉用户，你就得修改MyFaces中MultipartRequestWrapper类的源码。让我们找到捕获SizeLimitExceededException的地方，并使用FacesContext.getCurrentInstance().addMessage()来警告用户。<br />正如前面所说的，MyFaces Extensions 里有个能在JSF页面里使用的上传组件。下面的章节将说明如何使用。<br /><br />为了在web页面里使用JSF和MyFaces，你必须使用&lt;%@taglib%&gt;指令声明他们的标签库。<br /><br /><pre class="overflow">&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;<br />&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;<br />&lt;%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%&gt;</pre><br /><br />JSF的&lt;h:form&gt;标签没有method属性，因为它只支持post方法，但他有enctype属性，当你想上传文件时，你可以用它来定义表单数据的编码类型：<br /><pre class="overflow">&lt;f:view&gt;<br />    &lt;h:form id="MyForm" enctype="multipart/form-data" &gt;<br />        ...<br />        &lt;x:inputFileUpload id="myFileId"<br />            value="#{myBean.myFile}"<br />            storage="file"<br />            required="true"/&gt;<br />        ...<br />    &lt;/h:form&gt;<br />&lt;/f:view&gt;</pre><br /><br />MyFaces的&lt;x:inputFileUpload&gt; 标签让你定义UI组件的属性，它将在前台生成&lt;input type="file"&gt; 元素。包org.apache.myfaces.custom.fileupload 包含了控制UI结构的HtmlInputFileUpload类，它的renderer (HtmlFileUploadRenderer), 处理用户标签的类 (HtmlInputFileUploadTag),  UploadedFile 接口, 以及别的帮助类。 HtmlInputFileUpload 类 继承了标准的JSF HtmlInputText 组件 ，重写了几个函数。HtmlFileUploadRenderer负责创建 HTML 标签以及从MultipartRequestWrapper类返回FileItem(前面提过)。<br /><br />MyFaces提供了自己的UploadedFile接口读取上传文件的内容，文件类型，名字以及大小，而不是让你直接访问由Commons File Upload组件创建的FileItem实例。你的JSF表单背后的bean必须有一个UploadedFile属性。下面的例子中，UI组件的值通过JSF表达式(#{myBean.myFile})绑定到一个bean属性中。JSF框架将取得HtmlInputFileUpload 组件的值，这是个UploadedFile实例，并把它传送到背后bean的属性中。<br /><br /><pre class="overflow">import org.apache.myfaces.custom.fileupload.UploadedFile;<br />...<br />public class MyBean {<br />    private UploadedFile myFile;<br />    public UploadedFile getMyFile() {<br />        return myFile;<br />    }<br />    public void setMyFile(UploadedFile myFile) {<br />        this.myFile = myFile;<br />    }<br />    ...<br />}</pre><br /><br />我们应该知道MyFaces有两个实现 UploadedFile接口的类:UploadedFileDefaultMemoryImpl和UploadedFileDefaultFileImpl。当&lt;x:inputFileUpload&gt;标签没有storage属性或这个属性值为memory时，使用前一个类。当storage属性值为file时用后一个。<br /><br />类UploadedFileDefaultMemoryImp从一个FileItem实例中取得上传文件的内容以及它的名字，大小，文件类型，并把这些信息储存在一个私有属性里。所以即使Commons File Upload 把文件存在磁盘上，这个实现UploadedFile接口的类仍把上传文件的内容储存在内存里，浪费系统资源。<br />类UploadedFileDefaultFileImpl使用一个非序列化域(transient field)来保存一个对FileItem实例的引用。只有当getInputStream()被调用时，才通过这个引用读取上传文件的内容。这个类节省了内存空间，但如果它被序列化了，当其被反序列化后，你无法取得文件的内容。所以，支持上传文件表单的bean不应保存在session 域中，因为应用服务器在应用程序重起或服务器关闭时要对session bean序列化。<br /><br />如果你想让它们高效的工作，可以把背后的bean保存在request域并且在&lt;x:inputFileUpload&gt;中定义 storage="file"节省内存资源。你可以在UploadedFileDefaultFileImpl添加一个序列化上传文件的函数writeObject()，这样可以解决序列化的问题。为了使这个类更有效率，相应的readObject() 应该创建临时文件而不是从内存中读取它的内容。<br /><br /><b><span style="FONT-SIZE: 16px" twffan="done">应用程序例子</span></b><br /><br />前面的章节中，我们描述了MyFaces如何使用Commons File Upload支持上传文件功能。现在让我们来看一个使用这个功能的例子。一个JSF表单(MyForm.jsp）让用户选择文件以及message-digest algorithm，支持的bean(MyBean.java)计算要在别的页面(MyResult.jsp)显示的hash值。这些页面以及支持的bean和一个JSF配置文件(faces-config.xml)相关联。<br /><br /><b>MyForm.jsp页面</b><br />这里的JSF表单使用MyFaces的&lt;x:inputFileUpload&gt;标签，以及一些标准JSF标签,这些JSF标签将在页面生成labels,messages,以及一个包含message-digest algorithms的下拉列表，还有一个使用了JSF表达式的命令按钮，这个按钮用来定义处理上传文件的action方法。<br /><br /><pre class="overflow">&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;<br />&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;<br />&lt;%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%&gt;<br />&lt;f:view&gt;<br />&lt;h:form id="MyForm" enctype="multipart/form-data" &gt;<br />    &lt;h:messages globalOnly="true" styleClass="message"/&gt;<br />    &lt;h:panelGrid columns="3" border="0" cellspacing="5"&gt;<br />        &lt;h:outputLabel for="myFileId" value="File: "/&gt;<br />        &lt;x:inputFileUpload id="myFileId"<br />            value="#{myBean.myFile}"<br />            storage="file"<br />            required="true"/&gt;<br />        &lt;h:message for="myFileId"/&gt;<br />        &lt;h:outputLabel for="myParamId" value="Param: "/&gt;<br />        &lt;h:selectOneMenu id="myParamId"<br />                value="#{myBean.myParam}"<br />                required="true"&gt;<br />            &lt;f:selectItem itemLabel="" itemValue=""/&gt;<br />            &lt;f:selectItem itemLabel="MD5" itemValue="MD5"/&gt;<br />            &lt;f:selectItem itemLabel="SHA-1" itemValue="SHA-1"/&gt;<br />            &lt;f:selectItem itemLabel="SHA-256" itemValue="SHA-256"/&gt;<br />            &lt;f:selectItem itemLabel="SHA-384" itemValue="SHA-384"/&gt;<br />            &lt;f:selectItem itemLabel="SHA-512" itemValue="SHA-512"/&gt;<br />        &lt;/h:selectOneMenu&gt;<br />        &lt;h:message for="myParamId"/&gt;<br />        &lt;h:outputText value=" "/&gt;<br />        &lt;h:commandButton value="Submit"<br />            action="#{myBean.processMyFile}"/&gt;<br />        &lt;h:outputText value=" "/&gt;<br />    &lt;/h:panelGrid&gt;<br />&lt;/h:form&gt;<br />&lt;/f:view&gt;</pre><br /><br />processMyFile() 函数通过一个输入流取得上传文件的内容，这个输入流是通过调用myFile.getInputStream()函数返回的。hash值是使用java.security.MessageDigest计算出来的，然后这个值被转换成一个string,用myResult属性储存。<br /><br /><pre class="overflow">package com.devsphere.articles.jsfupload;<br />...<br />import javax.faces.application.FacesMessage;<br />import javax.faces.context.FacesContext;<br />import java.security.MessageDigest;<br />import java.security.NoSuchAlgorithmException;<br />import java.io.*;<br />public class MyBean {<br />    ...<br />    public String processMyFile() {<br />        try {<br />            MessageDigest md<br />                = MessageDigest.getInstance(myParam);<br />            InputStream in = new BufferedInputStream(<br />                myFile.getInputStream());<br />            try {<br />                byte[] buffer = new byte[64 * 1024];<br />                int count;<br />                while ((count = in.read(buffer)) &gt; 0)<br />                    md.update(buffer, 0, count);<br />            } finally {<br />                in.close();<br />            }<br />            byte hash[] = md.digest();<br />            StringBuffer buf = new StringBuffer();<br />            for (int i = 0; i &lt; hash.length; i++) {<br />                int b = hash[i] &amp; 0xFF;<br />                int c = (b &gt;&gt; 4) &amp; 0xF;<br />                c = c &lt; 10 ? '0' + c : 'A' + c - 10;<br />                buf.append((char) c);<br />                c = b &amp; 0xF;<br />                c = c &lt; 10 ? '0' + c : 'A' + c - 10;<br />                buf.append((char) c);<br />            }<br />            myResult = buf.toString();<br />            return "OK";<br />        } catch (Exception x) {<br />            FacesMessage message = new FacesMessage(<br />                FacesMessage.SEVERITY_FATAL,<br />                x.getClass().getName(), x.getMessage());<br />            FacesContext.getCurrentInstance().addMessage(<br />                null, message);<br />            return null;<br />        }<br />    }<br />}</pre><br /><br /><b>faces-config.xml 文件</b><br />这个JSF配置文件定义了支持的bean在request域以及一个导航规则：<br /><br /><pre class="overflow">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE faces-config PUBLIC<br />    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"<br />    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"&gt;<br />&lt;faces-config&gt;<br />    &lt;managed-bean&gt;<br />        &lt;managed-bean-name&gt;myBean&lt;/managed-bean-name&gt;<br />        &lt;managed-bean-class&gt;<br />            com.devsphere.articles.jsfupload.MyBean<br />        &lt;/managed-bean-class&gt;<br />        &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;<br />    &lt;/managed-bean&gt;<br />    &lt;navigation-rule&gt;<br />        &lt;from-view-id&gt;/MyForm.jsp&lt;/from-view-id&gt;<br />        &lt;navigation-case&gt;<br />            &lt;from-outcome&gt;OK&lt;/from-outcome&gt;<br />            &lt;to-view-id&gt;/MyResult.jsp&lt;/to-view-id&gt;<br />        &lt;/navigation-case&gt;<br />    &lt;/navigation-rule&gt;<br />&lt;/faces-config&gt;</pre><br /><br /><b>MyResult.jsp 页面</b><br />这个web页面显示了关于上传文件和hash值的一些信息：<br /><br /><pre class="overflow">&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;<br />&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;<br />&lt;f:view&gt;<br />    &lt;h:panelGrid columns="2" border="0" cellspacing="5"&gt;<br />        &lt;h:outputText value="FileName:"/&gt;<br />        &lt;h:outputText value="#{myBean.myFile.name}"/&gt;<br />        &lt;h:outputText value="FileSize:"/&gt;<br />        &lt;h:outputText value="#{myBean.myFile.size}"/&gt;<br />        &lt;h:outputText value="Param:"/&gt;<br />        &lt;h:outputText value="#{myBean.myParam}"/&gt;<br />        &lt;h:outputText value="Result:"/&gt;<br />        &lt;h:outputText value="#{myBean.myResult}"/&gt;<br />    &lt;/h:panelGrid&gt;<br />&lt;/f:view&gt;</pre><br /><br />事实上，显示的文件名字可能是在客户端文件系统的完整路径，正如在下面的浏览器中看到的：<br /><br /><img style="DISPLAY: inline" onclick="javascript:imgClick(this);" alt="image" src="http://www.matrix.org.cn/resource/upload/content/2005_08_31_000854_MDcPlSyiju.gif" onload="javascript:imgLoad(this);" border="0" twffan="done" resized="0" /><br />图2. 结果图<br /><br /><b><span style="FONT-SIZE: 16px" twffan="done">总结</span></b><br />在很多情况下，用户需要通过他们的浏览器上传文件，但在服务器方面并没有处理这些文件的良好方式。把小文件保存在内存里是可以接受的，但把大文件保存在临时文件里会让情况复杂。MyFaces让你选择的解决方法对你的应用程序很有帮助，但这个框架有几个小问题：当你已不再需要某个临时文件时，它却不让你删除；文件名有时候是文件路径；并且用户上传过大文件时它没有任何警告信息。但这些bug是可以修复的，因为源码可以修改的。这篇文章已经说明哪些地方的代码可以提高。不过，你可能会发现，对于很多应用程序来说，原有的MyFaces就已经足够了。这篇文章的例子是在JSF 1.1.01, MyFaces 1.0.9,和 Commons File Upload 1.0下测试的。<br /><br /><br /><b><span style="FONT-SIZE: 16px" twffan="done">资源</span></b><br />本文的范例代码: 
<div id="download" twffan="done"><a href="http://www.matrix.org.cn/resource/upload/content/2005_08_31_000934_hblnvSfdCa.zip">Download File</a></div><br />JavaServer Faces :http://java.sun.com/j2ee/javaserverfaces/<br />Apache MyFaces (参见: CodeZoo: MyFaces) :http://myfaces.apache.org/<br />Oracle ADF Faces:http://<span id="TheWorldKeyWord" style="BACKGROUND: #ffff00; COLOR: #000000">www</span>.oracle.com/technology/products/jdev/htdocs/partners/addins/exchange/jsf/index.html <br />Commons FileUpload:http://jakarta.apache.org/commons/fileupload/ <br /><br />Andrei Cioroianu 是Devsphere的创始人，分别在ONJava, JavaWorld, 及 Java Developer's Journal  上发表了许多文章。 <br /><br /></div>
<img src ="http://www.blogjava.net/itvincent/aggbug/78472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/itvincent/" target="_blank">itVincent</a> 2006-11-01 14:25 <a href="http://www.blogjava.net/itvincent/archive/2006/11/01/78472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Facelets 非常适合 JSF  </title><link>http://www.blogjava.net/itvincent/archive/2006/11/01/78400.html</link><dc:creator>itVincent</dc:creator><author>itVincent</author><pubDate>Wed, 01 Nov 2006 01:09:00 GMT</pubDate><guid>http://www.blogjava.net/itvincent/archive/2006/11/01/78400.html</guid><wfw:comment>http://www.blogjava.net/itvincent/comments/78400.html</wfw:comment><comments>http://www.blogjava.net/itvincent/archive/2006/11/01/78400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/itvincent/comments/commentRss/78400.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/itvincent/services/trackbacks/78400.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Facelets 非常适合 JSF 																						最终形成了专为 JSF 设计的视图技术！																																																																																																								...&nbsp;&nbsp;<a href='http://www.blogjava.net/itvincent/archive/2006/11/01/78400.html'>阅读全文</a><img src ="http://www.blogjava.net/itvincent/aggbug/78400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/itvincent/" target="_blank">itVincent</a> 2006-11-01 09:09 <a href="http://www.blogjava.net/itvincent/archive/2006/11/01/78400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>