??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美高清成人,亚洲精品无码专区在线播放,亚洲精品国产日韩http://www.aygfsteel.com/itvincent/category/17599.html喜欢Java,热爱技?/description>zh-cnFri, 27 Apr 2007 07:45:35 GMTFri, 27 Apr 2007 07:45:35 GMT60JSF html标签(1)http://www.aygfsteel.com/itvincent/archive/2007/04/27/114074.htmlitVincentitVincentFri, 27 Apr 2007 06:23:00 GMThttp://www.aygfsteel.com/itvincent/archive/2007/04/27/114074.htmlhttp://www.aygfsteel.com/itvincent/comments/114074.htmlhttp://www.aygfsteel.com/itvincent/archive/2007/04/27/114074.html#Feedback0http://www.aygfsteel.com/itvincent/comments/commentRss/114074.htmlhttp://www.aygfsteel.com/itvincent/services/trackbacks/114074.html阅读全文

itVincent 2007-04-27 14:23 发表评论
]]>
JSF技术研I——第一个JSFE序http://www.aygfsteel.com/itvincent/archive/2006/12/26/90139.htmlitVincentitVincentTue, 26 Dec 2006 09:05:00 GMThttp://www.aygfsteel.com/itvincent/archive/2006/12/26/90139.htmlhttp://www.aygfsteel.com/itvincent/comments/90139.htmlhttp://www.aygfsteel.com/itvincent/archive/2006/12/26/90139.html#Feedback7http://www.aygfsteel.com/itvincent/comments/commentRss/90139.htmlhttp://www.aygfsteel.com/itvincent/services/trackbacks/90139.html阅读全文

itVincent 2006-12-26 17:05 发表评论
]]>
JSF技术研I——几个JSF行名词的解?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/itvincent/archive/2006/12/21/89224.html</guid><wfw:comment>http://www.aygfsteel.com/itvincent/comments/89224.html</wfw:comment><comments>http://www.aygfsteel.com/itvincent/archive/2006/12/21/89224.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/itvincent/comments/commentRss/89224.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/itvincent/services/trackbacks/89224.html</trackback:ping><description><![CDATA[     摘要: 解答一个初学者的困惑Q大家听得比较多的是QJSF1.1QJSF1.2Qmyfaces,oracle ADF,ajax4jsfQfacelets,它们I竟是什么,有什么关pdQ?<br> <br>  <a href='http://www.aygfsteel.com/itvincent/archive/2006/12/21/89224.html'>阅读全文</a><img src ="http://www.aygfsteel.com/itvincent/aggbug/89224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/itvincent/" target="_blank">itVincent</a> 2006-12-21 10:55 <a href="http://www.aygfsteel.com/itvincent/archive/2006/12/21/89224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF虽然易学易用Q但中途麻烦多?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/itvincent/archive/2006/11/11/80539.html</guid><wfw:comment>http://www.aygfsteel.com/itvincent/comments/80539.html</wfw:comment><comments>http://www.aygfsteel.com/itvincent/archive/2006/11/11/80539.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/itvincent/comments/commentRss/80539.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/itvincent/services/trackbacks/80539.html</trackback:ping><description><![CDATA[   最q研IJSF苦啊,从JSF RI 1.1到MyFaces1.5,再到facelets,q没整合到Ajax的部?已经很多ȝ?L很多奇怪的错误,原因有因为包的版本的问题,包的冲突的问?包之间版本不匚w的问?配置文g也由于一点点的不?但配|时不报?却在q行的时候显C出跟配|无关的错误,q有一个因|了别的tomcat端口而出现的异常,而且最重要的是它的E_?我们做的成功的应用放到别人的机器上用׃出现问题,所有这些都影响了对JSF的学习与使用?br />   单个的\难走Q整合的路更难走。幸好今天终于把exadel studio4.0l下载了Q里面的工具对JSF支持很好?br />   ׃q段旉很忙Q所以要有些旉Qȝ技术问题之后再发上来?img src ="http://www.aygfsteel.com/itvincent/aggbug/80539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/itvincent/" target="_blank">itVincent</a> 2006-11-11 09:29 <a href="http://www.aygfsteel.com/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.aygfsteel.com/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.aygfsteel.com/itvincent/archive/2006/11/02/78591.html</guid><wfw:comment>http://www.aygfsteel.com/itvincent/comments/78591.html</wfw:comment><comments>http://www.aygfsteel.com/itvincent/archive/2006/11/02/78591.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/itvincent/comments/commentRss/78591.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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'">Q所以在我的</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'">q行׃报错Q而我的程序用的是</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.)Q也是这L原因?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'">Qؓ了稳定v见,应该使用</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没有验证,和页面提交表单后,q回再提交会出现的丢失数据的问题也解决了Q我之前的文?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.aygfsteel.com/itvincent/aggbug/78591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/itvincent/" target="_blank">itVincent</a> 2006-11-02 09:23 <a href="http://www.aygfsteel.com/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.aygfsteel.com/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.aygfsteel.com/itvincent/archive/2006/11/01/78481.html</guid><wfw:comment>http://www.aygfsteel.com/itvincent/comments/78481.html</wfw:comment><comments>http://www.aygfsteel.com/itvincent/archive/2006/11/01/78481.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/itvincent/comments/commentRss/78481.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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'">的时候(默认Q,发现点击览?/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'">按钮会导致退回的面不可用,重新提交的表单不生效Q服务器端不hQ但面会蟩转,必须h一ơ才能解冟?/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'">我想C个解军_法:</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'">可以解决Q但是客L面中会出现很长的隐藏信息,虽然不媄响客户用,但是面会变得很冗长。而且看到有h说页面中夹入?/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'">打印的中文提C变成了q?/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"><</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">></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"><</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">></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"></</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">></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"><</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">></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"></</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">></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"><</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">></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"></</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">></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"></</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">></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"><</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">></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'">也可以解冻I但例如新增修Ҏ做在同一个页面的时候,之前做过修改操作Q新增的时也会存在修Ҏ的内?/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'">h有什么方法可以更好的解决q个问题Q?/span> </p> <img src ="http://www.aygfsteel.com/itvincent/aggbug/78481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/itvincent/" target="_blank">itVincent</a> 2006-11-01 15:43 <a href="http://www.aygfsteel.com/itvincent/archive/2006/11/01/78481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]用JSF和MyFaces上传文ghttp://www.aygfsteel.com/itvincent/archive/2006/11/01/78472.htmlitVincentitVincentWed, 01 Nov 2006 06:25:00 GMThttp://www.aygfsteel.com/itvincent/archive/2006/11/01/78472.htmlhttp://www.aygfsteel.com/itvincent/comments/78472.htmlhttp://www.aygfsteel.com/itvincent/archive/2006/11/01/78472.html#Feedback2http://www.aygfsteel.com/itvincent/comments/commentRss/78472.htmlhttp://www.aygfsteel.com/itvincent/services/trackbacks/78472.html

用JSF和MyFaces上传文g

RR00 发表?2005-08-31 00:12:00
作?Andrei Cioroianu;RR00     来源:Onjava
评论?1 点击?4,703     投票d?5 投票Mh?1
关键?JSF MyFaces Upload

摘要:

用户可以很方便用浏览器上传文gQ但是当前的Java Web标准Q如servlets, JSP, and JSFQƈ没有提供M上传的功能。幸好第三方框架Q比?Apache Commons File Upload, Apache MyFaces, and Oracle ADF FacesQ提供了单的API和客h{,实现了这个功能。文章的前半部分介l上传组件是如何工作的,在文章的后半部分Q介l了一个让用户通过览器上传文件的例子?
用JSF和MyFaces上传文g

作者:Andrei Cioroianu

译Q?span style="COLOR: purple" twffan="done">RR00

email:di_feng_ro@hotmail.com


版权声明Q可以Q意{载,转蝲时请务必以超链接形式标明文章原始出处和作者信息及本声?br />英文原文地址:
http://www.onjava.com/pub/a/onjava/2005/07/13/jsfupload.html
中文地址:
http://www.matrix.org.cn/resource/article/43/43703_JSF_MyFaces_Upload.html
关键词: JSF MyFaces Upload



用户可以很方便用浏览器上传文gQ但是当前的Java Web标准Q如servlets, JSP, and JSFQƈ没有提供M上传的功能。幸好第三方框架Q比?Apache Commons File Upload, Apache MyFaces, and Oracle ADF FacesQ提供了单的API和客h{,实现了这个功能。文章的前半部分介l上传组件是如何工作的,你将看到MyFaces and Commons File Upload 的部分源码(实际上,前者采用的是后者的代码Q。了解这些源码的内在机制我们更有效的使用q些框架Qƈ且可以根据需要修改他们!在文章的后半部分Q介l了一个让用户通过览器上传文件的例子?br />
ZWEB的文件上?/span>
“上传”这个词的用比较广泛。一个web理员在他的主页发布了一个文Ӟ他可以说他上传了一个文Ӟ当一个网l工E师创徏了一个HTML form和一些脚本普通用户可以通过览器上传文Ӟ他说他实C上传的功能?br />q两U方式之中有些共同的地方Q因Z个web理员可以通过一个基于web的接口来发布文gQ页面,囑փQ脚本等{)。那些免Ҏ供个Z늚公司Q比如yahooQ实CZweb的文件上传功能,因ؓ客户需要上传页面。这样Q何h只要接入|络Q就可以通过览器发布他的个人站炏V但是,q有许多更好的方式让你发布你的网内容,比如FTP或secure FTP。在q种情况下,你就需要一个对应的应用E序Q比如FTP客户端,而不是浏览器来发布你的网站?br />
q篇文章从|络开发者的角度来讨论文件上传。一个基于web的mail应用E序Q比如yahoo mail,实现了上传功能,q样用户才能发送信息和附g。另一个好的例子是一个job|站必须让你能够发送简历给招聘人员。在你的应用E序中,你可以对上传的文件作M你想做的事情Q比如把q些文g的内容储存到数据库中或者把他们当作附g发送出厅R这文章的例子计算了上传文件的hash倹{现在,让我们看看如何在一个web应用E序中实C传功能?br />
一个html表单包含一个或多个<input type="file"> 元素Q这个元素将在页面上生成文g输入框,用户可以在这里填写文件\径。用L击输入字D后面的览(browse)按钮后,会弹Z个对话框让用户选择路径Q?br />
image

当用L击表单的Sumbit按钮Q浏览器对表单数据进行编码,其中包括文g的内容,名字Q\径以及其他的表单参数。然后,览器把~码q的数据传递给web服务器,服务器再把这些数据传递给相应的页面,比如<form>标签里的action属性倹{如果是java|络应用E序Qaction属性值可能是个servlet或者是个jsp面?br />因ؓ默认的表单编码和getҎ不适合上传文gQ所以一个包含文件输入框的表单必d义编码ؓmultipart/form-data Qƈ且在<form>标签里用POSTҎQ?br />
<form enctype="multipart/form-data" method="POST" action="...">
    ...
    <input type="file" name="...">
    ...
</form>


但是Q事情ƈ不象看v来那么简单,实现了servlet and JSP 标准的应用服务器q没有被要求处理 multipart/form-data~码。所以你需要一个解析器来处理请求的输入?比如Apache Commons File UploadlgQ它是个java包,能从已编码的数据中读取出上传文g的内宏V这个包的API很灵z,允许你把文件存在内存里而大文g储存在磁盘上一个时文件夹里。你不但可以定义大文件和文件的界限Q还可以定义上传文g所占空间的最大倹{?br />
org.apache.commons.fileupload里有个DiskFileUploadc,它的parseRequest()函数获得一个HttpServletRequestQ返回一个ListQ其中包含了org.apache.commons.fileupload.FileItem的实例。servleth的getInputStream()函数q回一个数据流Q已~译的表单数据就是从q里d出来的。FileItem很容易让解,因ؓq个接口的实例不仅包括上传文?q有其他的请求参数?br />
Commons File Upload 包提供的API可以解析数据Q但是servleth的getParameter()函数和getParameterValues()函数却不能工作。因两个函数被运行在常用的输入框, 复选框, 单选按? 和下拉列表后面的标准JSFlg调用Q所以这个问题需要解冟뀂Servlets API提供的两个功?filters和request wrappers) 可以解决q个问题。下面的章节描述了在没有破坏原有JSFl构的情况下QApache MyFaces 如何实现了一个filter功能Q从而添加了更多需要的支持。另外,MyFaces提供的API可以创徏javaBeanQ和生成<input type="file">元素的JSFlg相对应?br />
配置 JSF 和MyFaces Extensions
目前最主要的实现JSF规范的框架有JSF Reference Implementation (RI)以及Apache提供的MyFaces。虽然还有别的,但这两个是最行的。很多开发者更們֐于JSF RIQ因是来自于sun的官方品。但MyFaces有一些有的扩展的功能,比如上传文g。如果你喜欢Q你可以同时使用MyFaces的扩展功能和JSF RI。你只需要把myfaces-extensions.jar和JSF RI的jar文g以及 commons-fileupload-1.0.jar 攑֜web应用E序的WEB-INF/lib 目录下即可。下面是你需要的jar文gQ?br />
image

org.apache.myfaces.component.html.util包的MultipartRequestWrappercdZMyFaces和Commons File Uploadq接的桥梁。这个类l承了HttpServletRequestWrapperQ重写了getParameterMap(), getParameterNames(), getParameter(), 和getParameterValues() 函数Q所以他们能正确处理multipart/form-data ~码数据。另外,MultipartRequestWrapper提供的两个函敎ͼgetFileItem() 和getFileItems(),使你可以通过org.apache.commons.fileupload.FileItem 接口讉K上传文g?br />
MyFaces?ExtensionsFilter cdorg.apache.myfaces.component.html.util 包里Q当它发现multipart/form-data~码的时候,它会创徏 MultipartRequestWrapper 的实例。所以你不需理会他是如何解析表单数据的,但是知道它是如何开始解析对你想要修改上传文件的处理方式是有用的。在一个传l的应用E序中,你只需要在web.xml描述W中配置好ExtensionsFilter Q它p在JSF的FacesServlet之前截获HTTPhQ?br />
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <servlet>
        <servlet-name>FacesServlet</servlet-name>
        <servlet-class>
            javax.faces.webapp.FacesServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>FacesServlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>FacesServlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>ExtensionsFilter</filter-name>
        <filter-class>
            org.apache.myfaces.component.html.util.ExtensionsFilter
        </filter-class>
        <init-param>
            <param-name>uploadMaxFileSize</param-name>
            <param-value>10m</param-value>
        </init-param>
        <init-param>
            <param-name>uploadThresholdSize</param-name>
            <param-value>100k</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>ExtensionsFilter</filter-name>
        <servlet-name>FacesServlet</servlet-name>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>


前面例子中,filter的两个参数告诉MyFaces把小?00K的文件保存在内存中,而对于大?0M的文件则忽略。大在uploadThresholdSize值和uploadMaxFileSizeg间的文g则作Z时文件存在硬盘上。如果你上传很大的文Ӟ当前的MyFaces版本会忽略所有的表单数据Q就好象你提交了一个空表单。如果你x上传p|的消息告诉用P你就得修改MyFaces中MultipartRequestWrappercȝ源码。让我们扑ֈ捕获SizeLimitExceededException的地方,q用FacesContext.getCurrentInstance().addMessage()来警告用戗?br />正如前面所说的QMyFaces Extensions 里有个能在JSF面里用的上传lg。下面的章节说明如何用?br />
Z在web面里用JSF和MyFacesQ你必须使用<%@taglib%>指o声明他们的标{ֺ?br />
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%>


JSF?lt;h:form>标签没有method属性,因ؓ它只支持postҎQ但他有enctype属性,当你想上传文件时Q你可以用它来定义表单数据的~码cdQ?br />
<f:view>
    <h:form id="MyForm" enctype="multipart/form-data" >
        ...
        <x:inputFileUpload id="myFileId"
            value="#{myBean.myFile}"
            storage="file"
            required="true"/>
        ...
    </h:form>
</f:view>


MyFaces?lt;x:inputFileUpload> 标签让你定义UIlg的属性,它将在前台生?lt;input type="file"> 元素。包org.apache.myfaces.custom.fileupload 包含了控制UIl构的HtmlInputFileUploadc,它的renderer (HtmlFileUploadRenderer), 处理用户标签的类 (HtmlInputFileUploadTag),  UploadedFile 接口, 以及别的帮助cR?HtmlInputFileUpload c?l承了标准的JSF HtmlInputText lg Q重写了几个函数。HtmlFileUploadRenderer负责创徏 HTML 标签以及从MultipartRequestWrapperc返回FileItem(前面提过)?br />
MyFaces提供了自qUploadedFile接口d上传文g的内容,文gcdQ名字以及大,而不是让你直接访问由Commons File Uploadlg创徏的FileItem实例。你的JSF表单背后的bean必须有一个UploadedFile属性。下面的例子中,UIlg的值通过JSF表达?#{myBean.myFile})l定C个bean属性中。JSF框架取得HtmlInputFileUpload lg的|q是个UploadedFile实例Qƈ把它传送到背后bean的属性中?br />
import org.apache.myfaces.custom.fileupload.UploadedFile;
...
public class MyBean {
    private UploadedFile myFile;
    public UploadedFile getMyFile() {
        return myFile;
    }
    public void setMyFile(UploadedFile myFile) {
        this.myFile = myFile;
    }
    ...
}


我们应该知道MyFaces有两个实?UploadedFile接口的类:UploadedFileDefaultMemoryImpl和UploadedFileDefaultFileImpl。当<x:inputFileUpload>标签没有storage属性或q个属性gؓmemoryӞ使用前一个类。当storage属性gؓfile时用后一个?br />
cUploadedFileDefaultMemoryImp从一个FileItem实例中取得上传文件的内容以及它的名字Q大,文gcdQƈ把这些信息储存在一个私有属性里。所以即使Commons File Upload 把文件存在磁盘上Q这个实现UploadedFile接口的类仍把上传文g的内容储存在内存里,费pȝ资源?br />cUploadedFileDefaultFileImpl使用一个非序列化域(transient field)来保存一个对FileItem实例的引用。只有当getInputStream()被调用时Q才通过q个引用d上传文g的内宏V这个类节省了内存空_但如果它被序列化了,当其被反序列化后Q你无法取得文g的内宏V所以,支持上传文g表单的bean不应保存在session 域中Q因为应用服务器在应用程序重h服务器关闭时要对session bean序列化?br />
如果你想让它们高效的工作Q可以把背后的bean保存在request域ƈ且在<x:inputFileUpload>中定?storage="file"节省内存资源。你可以在UploadedFileDefaultFileImpld一个序列化上传文g的函数writeObject()Q这样可以解军_列化的问题。ؓ了ɘq个cL有效率,相应的readObject() 应该创徏临时文g而不是从内存中读取它的内宏V?br />
应用E序例子

前面的章节中Q我们描qCMyFaces如何使用Commons File Upload支持上传文g功能。现在让我们来看一个用这个功能的例子。一个JSF表单(MyForm.jspQ让用户选择文g以及message-digest algorithmQ支持的bean(MyBean.java)计算要在别的面(MyResult.jsp)昄的hash倹{这些页面以及支持的bean和一个JSF配置文g(faces-config.xml)相关联?br />
MyForm.jsp面
q里的JSF表单使用MyFaces?lt;x:inputFileUpload>标签Q以及一些标准JSF标签,q些JSF标签在面生成labels,messages,以及一个包含message-digest algorithms的下拉列表,q有一个用了JSF表达式的命o按钮Q这个按钮用来定义处理上传文件的actionҎ?br />
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%>
<f:view>
<h:form id="MyForm" enctype="multipart/form-data" >
    <h:messages globalOnly="true" styleClass="message"/>
    <h:panelGrid columns="3" border="0" cellspacing="5">
        <h:outputLabel for="myFileId" value="File: "/>
        <x:inputFileUpload id="myFileId"
            value="#{myBean.myFile}"
            storage="file"
            required="true"/>
        <h:message for="myFileId"/>
        <h:outputLabel for="myParamId" value="Param: "/>
        <h:selectOneMenu id="myParamId"
                value="#{myBean.myParam}"
                required="true">
            <f:selectItem itemLabel="" itemValue=""/>
            <f:selectItem itemLabel="MD5" itemValue="MD5"/>
            <f:selectItem itemLabel="SHA-1" itemValue="SHA-1"/>
            <f:selectItem itemLabel="SHA-256" itemValue="SHA-256"/>
            <f:selectItem itemLabel="SHA-384" itemValue="SHA-384"/>
            <f:selectItem itemLabel="SHA-512" itemValue="SHA-512"/>
        </h:selectOneMenu>
        <h:message for="myParamId"/>
        <h:outputText value=" "/>
        <h:commandButton value="Submit"
            action="#{myBean.processMyFile}"/>
        <h:outputText value=" "/>
    </h:panelGrid>
</h:form>
</f:view>


processMyFile() 函数通过一个输入流取得上传文g的内容,q个输入是通过调用myFile.getInputStream()函数q回的。hash值是使用java.security.MessageDigest计算出来的,然后q个D转换成一个string,用myResult属性储存?br />
package com.devsphere.articles.jsfupload;
...
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.*;
public class MyBean {
    ...
    public String processMyFile() {
        try {
            MessageDigest md
                = MessageDigest.getInstance(myParam);
            InputStream in = new BufferedInputStream(
                myFile.getInputStream());
            try {
                byte[] buffer = new byte[64 * 1024];
                int count;
                while ((count = in.read(buffer)) > 0)
                    md.update(buffer, 0, count);
            } finally {
                in.close();
            }
            byte hash[] = md.digest();
            StringBuffer buf = new StringBuffer();
            for (int i = 0; i < hash.length; i++) {
                int b = hash[i] & 0xFF;
                int c = (b >> 4) & 0xF;
                c = c < 10 ? '0' + c : 'A' + c - 10;
                buf.append((char) c);
                c = b & 0xF;
                c = c < 10 ? '0' + c : 'A' + c - 10;
                buf.append((char) c);
            }
            myResult = buf.toString();
            return "OK";
        } catch (Exception x) {
            FacesMessage message = new FacesMessage(
                FacesMessage.SEVERITY_FATAL,
                x.getClass().getName(), x.getMessage());
            FacesContext.getCurrentInstance().addMessage(
                null, message);
            return null;
        }
    }
}


faces-config.xml 文g
q个JSF配置文g定义了支持的bean在request域以及一个导航规则:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC
    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
    <managed-bean>
        <managed-bean-name>myBean</managed-bean-name>
        <managed-bean-class>
            com.devsphere.articles.jsfupload.MyBean
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/MyForm.jsp</from-view-id>
        <navigation-case>
            <from-outcome>OK</from-outcome>
            <to-view-id>/MyResult.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>


MyResult.jsp 面
q个web面昄了关于上传文件和hash值的一些信息:

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<f:view>
    <h:panelGrid columns="2" border="0" cellspacing="5">
        <h:outputText value="FileName:"/>
        <h:outputText value="#{myBean.myFile.name}"/>
        <h:outputText value="FileSize:"/>
        <h:outputText value="#{myBean.myFile.size}"/>
        <h:outputText value="Param:"/>
        <h:outputText value="#{myBean.myParam}"/>
        <h:outputText value="Result:"/>
        <h:outputText value="#{myBean.myResult}"/>
    </h:panelGrid>
</f:view>


事实上,昄的文件名字可能是在客L文gpȝ的完整\径,正如在下面的览器中看到的:

image
?. l果?br />
ȝ
在很多情况下Q用户需要通过他们的浏览器上传文gQ但在服务器斚wq没有处理这些文件的良好方式。把文件保存在内存里是可以接受的,但把大文件保存在临时文g里会让情况复杂。MyFaces让你选择的解x法对你的应用E序很有帮助Q但q个框架有几个小问题Q当你已不再需要某个时文件时Q它却不让你删除Q文件名有时候是文g路径Qƈ且用户上传过大文件时它没有Q何警告信息。但q些bug是可以修复的Q因为源码可以修改的。这文章已l说明哪些地方的代码可以提高。不q,你可能会发现Q对于很多应用程序来_原有的MyFaces已l够了。这文章的例子是在JSF 1.1.01, MyFaces 1.0.9,?Commons File Upload 1.0下测试的?br />

资源
本文的范例代?
JavaServer Faces :http://java.sun.com/j2ee/javaserverfaces/
Apache MyFaces (参见: CodeZoo: MyFaces) :http://myfaces.apache.org/
Oracle ADF Faces:http://www.oracle.com/technology/products/jdev/htdocs/partners/addins/exchange/jsf/index.html
Commons FileUpload:http://jakarta.apache.org/commons/fileupload/

Andrei Cioroianu 是Devsphere的创始hQ分别在ONJava, JavaWorld, ?Java Developer's Journal  上发表了许多文章?



itVincent 2006-11-01 14:25 发表评论
]]>
[转]Facelets 非常适合 JSF http://www.aygfsteel.com/itvincent/archive/2006/11/01/78400.htmlitVincentitVincentWed, 01 Nov 2006 01:09:00 GMThttp://www.aygfsteel.com/itvincent/archive/2006/11/01/78400.htmlhttp://www.aygfsteel.com/itvincent/comments/78400.htmlhttp://www.aygfsteel.com/itvincent/archive/2006/11/01/78400.html#Feedback0http://www.aygfsteel.com/itvincent/comments/commentRss/78400.htmlhttp://www.aygfsteel.com/itvincent/services/trackbacks/78400.html阅读全文

itVincent 2006-11-01 09:09 发表评论
]]>
վ֩ģ壺 | | | Դ| | ̩| ɯ| | | | | | | | | Դ| | | | | ͼľ| ɽ| ګ| Ͻ| ո| | | ̶| | ʤ| ʲ| | | Ѱ| | ֹ| | | | | |