<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Cheney Shue</title><subtitle type="text">LAMP, Oracle ADF &amp; SOA, 数据仓库, 商务智能, 数据挖掘, 企业绩效管理</subtitle><id>http://feed.cnblogs.com/blog/u/24273/rss</id><updated>2012-05-27T16:18:26Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/24273/rss"/><entry><id>http://www.cnblogs.com/esestt/archive/2012/05/28/2520688.html</id><title type="text">Oracle &amp;amp; Endeca</title><summary type="text">这两天粗略的研究了一下Endeca，感觉这货是相当的不错，有些类似以前看到过的QlikView。其他的不说，就非维度型、非结构化的的查询和报表，可以直接把BI Publisher淘汰掉了。行业内的分析师对这个收购多持正面态度，Forrester甚至说这次收购让Oracle一举超越IBM和SAP。而下面的问题是，Oracle怎么定位Endeca，以及如何整合到现有的产品线中。从技术角度来说，Endeca Studio Server可以部署到Tomcat、Webshpere这些Application Server中，放到Weblogic也没问题。而Endeca Server是一个系统进程，使用O.</summary><published>2012-05-27T16:18:00Z</published><updated>2012-05-27T16:18:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2012/05/28/2520688.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2012/05/28/2520688.html"/><content type="html">&lt;p&gt; 这两天粗略的研究了一下Endeca，感觉这货是相当的不错，有些类似以前看到过的QlikView。其他的不说，就非维度型、非结构化的的查询和报表，可以直接把BI Publisher淘汰掉了。行业内的分析师对这个收购多持正面态度，Forrester甚至说这次收购让Oracle一举超越IBM和SAP。而下面的问题是，Oracle怎么定位Endeca，以及如何整合到现有的产品线中。&lt;/p&gt;&lt;p&gt;从技术角度来说，Endeca Studio Server可以部署到Tomcat、Webshpere这些Application Server中，放到Weblogic也没问题。而Endeca Server是一个系统进程，使用OPMN管理问题不大。然后用ODI替换掉CloverETL。最大的难题应该是如何和BIEE整合的问题，BIEE和最新的EPM都用了ADF风格的界面，Endeca的界面是否要重弄就是个疑问了。&lt;/p&gt;&lt;p&gt;不管怎样，都不指望短期内Oracle对Endeca的roadmap有一个清晰的描述。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/esestt/aggbug/2520688.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2012/05/28/2520688.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2012/02/22/2363114.html</id><title type="text">无题</title><summary type="text">半年时间，断断续续，把biee的教程弄好了。朋友之前就说过，出书、做教程是吃力不讨好的事情，果真如此年末开始组建新团队，招个人好难啊今天看了biee 11.1.1.6的new feature，传说中的micro-charts还是无有…</summary><published>2012-02-22T06:37:00Z</published><updated>2012-02-22T06:37:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2012/02/22/2363114.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2012/02/22/2363114.html"/><content type="html">&lt;p&gt; 半年时间，断断续续，把biee的教程弄好了。朋友之前就说过，出书、做教程是吃力不讨好的事情，果真如此&lt;img src="http://www.cnblogs.com/Emoticons/msn/71_71.gif"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;年末开始组建新团队，招个人好难啊&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;今天看了biee 11.1.1.6的new feature，传说中的micro-charts还是无有&amp;#8230;&lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/esestt/aggbug/2363114.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2012/02/22/2363114.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2011/10/28/2227240.html</id><title type="text">无题</title><summary type="text">在机场候机时买了本乔布斯的传记，机上看了前几章。看后不由感慨中美文化和教育模式的差异，照中国这种模式恐怕永远也出不了一个乔布斯。</summary><published>2011-10-28T00:56:00Z</published><updated>2011-10-28T00:56:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2011/10/28/2227240.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2011/10/28/2227240.html"/><content type="html">&lt;p&gt;在机场候机时买了本乔布斯的传记，机上看了前几章。看后不由感慨中美文化和教育模式的差异，照中国这种模式恐怕永远也出不了一个乔布斯。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/esestt/aggbug/2227240.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2011/10/28/2227240.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2011/10/11/2207452.html</id><title type="text">Oracle EM 12c</title><summary type="text">这次是12c，不是12g或者12 fusion，Oracle又有了新噱头——Cloud。安装折腾了两个小时，粗略看了下界面，UI风格总算统一了。</summary><published>2011-10-11T08:19:00Z</published><updated>2011-10-11T08:19:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2011/10/11/2207452.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2011/10/11/2207452.html"/><content type="html">&lt;p&gt;这次是12c，不是12g或者12 fusion，Oracle又有了新噱头&amp;#8212;&amp;#8212;Cloud。安装折腾了两个小时，粗略看了下界面，UI风格总算统一了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/esestt/oem01.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/esestt/oem02.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/esestt/oem03.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/esestt/aggbug/2207452.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2011/10/11/2207452.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2011/06/09/2076299.html</id><title type="text">近况</title><summary type="text">4月份到桂林待了十来天。5月份办了件大事。6月底要考试，公司组织培训没去，心里没底，要努力备考啦。最近老婆迷上了网球，差不多每天晚上都要陪她玩一阵。电信10M光纤免费体验到期，被逼升级到E9套餐。摄影书籍买了好几本，镜头投了不少钱，但也没见单反拍出了的照片比傻瓜机好多少。Kindle DX很棒，打印机基本废了。Over.</summary><published>2011-06-09T05:27:00Z</published><updated>2011-06-09T05:27:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2011/06/09/2076299.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2011/06/09/2076299.html"/><content type="html">&lt;p&gt;4月份到桂林待了十来天。&lt;/p&gt;&lt;p&gt;5月份办了件大事。&lt;/p&gt;&lt;p&gt;6月底要考试，公司组织培训没去，心里没底，要努力备考啦。&lt;/p&gt;&lt;p&gt;最近老婆迷上了网球，差不多每天晚上都要陪她玩一阵。&lt;/p&gt;&lt;p&gt;电信10M光纤免费体验到期，被逼升级到E9套餐。&lt;/p&gt;&lt;p&gt;摄影书籍买了好几本，镜头投了不少钱，但也没见单反拍出了的照片比傻瓜机好多少。&lt;/p&gt;&lt;p&gt;Kindle DX很棒，打印机基本废了。&amp;nbsp;&lt;/p&gt;&lt;p&gt;Over.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/esestt/aggbug/2076299.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2011/06/09/2076299.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2011/06/07/2074654.html</id><title type="text">无题</title><summary type="text">很久就没更新博客了。在美国时玩上了facebook，facebook真是个好东西。</summary><published>2011-06-07T14:01:00Z</published><updated>2011-06-07T14:01:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2011/06/07/2074654.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2011/06/07/2074654.html"/><content type="html">很久就没更新博客了。在美国时玩上了facebook，facebook真是个好东西。&lt;img src="http://www.cnblogs.com/esestt/aggbug/2074654.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2011/06/07/2074654.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2010/08/29/1811862.html</id><title type="text">JSF or PHP or ADF?!!  :(</title><summary type="text">最近要写一个WEB程序，PHP, JSF 2.0, ADF三种技术，考虑了半天都没确定用哪一种。三种都各有优缺点，真tm郁闷。</summary><published>2010-08-29T06:24:00Z</published><updated>2010-08-29T06:24:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2010/08/29/1811862.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2010/08/29/1811862.html"/><content type="html">最近要写一个WEB程序，PHP, JSF 2.0, ADF三种技术，考虑了半天都没确定用哪一种。三种都各有优缺点，真tm郁闷。&lt;img src="http://www.cnblogs.com/esestt/aggbug/1811862.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2010/08/29/1811862.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2010/07/22/1782803.html</id><title type="text">ODI 11g再次让我失望……</title><summary type="text">相对10g没什么大变化。Interface不像OWB那样有很多组件可用，只能简单的从source到target，复杂的转换就要interface互相嵌套完成。针对某类数据库特性的处理就需要写km了。Package的流程控制功能不强，比如loop操作，只能在Procedure中完成。Procedure和KM基本上就算是coding了。所以说ODI的作用局限在不同类型的数据库间的集成，复杂的转换还是装...</summary><published>2010-07-22T02:27:00Z</published><updated>2010-07-22T02:27:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2010/07/22/1782803.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2010/07/22/1782803.html"/><content type="html">&lt;p&gt;相对10g没什么大变化。Interface不像OWB那样有很多组件可用，只能简单的从source到target，复杂的转换就要interface互相嵌套完成。针对某类数据库特性的处理就需要写km了。Package的流程控制功能不强，比如loop操作，只能在Procedure中完成。Procedure和KM基本上就算是coding了。&lt;/p&gt;&lt;p&gt;所以说ODI的作用局限在不同类型的数据库间的集成，复杂的转换还是装载到Oracle数据库后使用OWB完成。但目前ODI似乎没有提供直接调用OWB的tool，而且ELT这类做法在处理大数据量时不是很可靠，OWB产生的package有冗余的操作，不如自己写的sql那么高效。&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/esestt/aggbug/1782803.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2010/07/22/1782803.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2010/07/22/1782701.html</id><title type="text">从徐汇到虹口</title><summary type="text">从万体馆搬到虹口已经快4个月，期间身份证还被偷了，新办的户口地址已经变成虹口区，从此就被打上虹口的烙印。在虹口的这几个月中，明显感觉到虹口和徐汇是两个完全不同的地方。虹口像是60岁的老人，而徐汇是30岁的中青年。这种差异主要体现在居民年龄结构和功能设施方面。虹口这边老小区很多，在街上到处都是闲逛的阿姨大妈。菜市里、小区里常常看到有人吵架。曲阳家乐福装水果的免费塑料袋经常都被贪便宜的小市民拿光，还有一次看到工作人员趁人不注意，扯了一大把的袋子往兜里塞。总之，虹口区闲人多，乱七八糟的事情也多。另一方面，虽然虹口离市中心很近，但一直发展不起来。四川北路商业区没什么特色，周围都是老生活区，消费层次不高</summary><published>2010-07-22T00:59:00Z</published><updated>2010-07-22T00:59:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2010/07/22/1782701.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2010/07/22/1782701.html"/><content type="html">&lt;p&gt;从万体馆搬到虹口已经快4个月，期间身份证还被偷了，新办的户口地址已经变成虹口区，从此就被打上虹口的烙印。&lt;/p&gt;&lt;p&gt;在虹口的这几个月中，明显感觉到虹口和徐汇是两个完全不同的地方。虹口像是60岁的老人，而徐汇是30岁的中青年。这种差异主要体现在居民年龄结构和功能设施方面。&lt;/p&gt;&lt;p&gt;虹口这边老小区很多，在街上到处都是闲逛的阿姨大妈。菜市里、小区里常常看到有人吵架。曲阳家乐福装水果的免费塑料袋经常都被贪便宜的小市民拿光，还有一次看到工作人员趁人不注意，扯了一大把的袋子往兜里塞。总之，虹口区闲人多，乱七八糟的事情也多。&lt;/p&gt;&lt;p&gt;另一方面，虽然虹口离市中心很近，但一直发展不起来。四川北路商业区没什么特色，周围都是老生活区，消费层次不高，拆迁改造困难。还好临近的杨浦有个五角场，上次去五角场真让我大吃一惊，想不到在我毕业后几年间五角场已经建设得如此&amp;#8220;高档&amp;#8221;了。高楼虽然有了，但还缺人气，周边的商业环境远不如徐家汇成熟，五角场隔了一条街过去感觉还是乡下地方。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/esestt/aggbug/1782701.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2010/07/22/1782701.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/esestt/archive/2010/07/08/1774029.html</id><title type="text">JSF 2.0碰到一个比较纠结的问题——上传文件</title><summary type="text">JSF 1.2之前还可以用MyFaces的组件，2.0还是个新玩意，只能靠自己。开始的想法是自己做一个上传文件组件，组件中封装&lt;input type="file" /&gt;，然后用commons-fileupload解析ServletRequest。代码Code highlighting produced by Actipro CodeHighlighter (freeware)http:...</summary><published>2010-07-08T15:56:00Z</published><updated>2010-07-08T15:56:00Z</updated><author><name>Cheney Shue</name><uri>http://www.cnblogs.com/esestt/</uri></author><link rel="alternate" href="http://www.cnblogs.com/esestt/archive/2010/07/08/1774029.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/esestt/archive/2010/07/08/1774029.html"/><content type="html">&lt;p&gt;JSF 1.2之前还可以用MyFaces的组件，2.0还是个新玩意，只能靠自己。&lt;/p&gt;&lt;p&gt;开始的想法是自己做一个上传文件组件，组件中封装&amp;lt;input type="file" /&amp;gt;，然后用commons-fileupload解析ServletRequest。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('75d0f836-876d-4080-8665-45107778a9e4')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_75d0f836-876d-4080-8665-45107778a9e4"  alt="" /&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_75d0f836-876d-4080-8665-45107778a9e4" onclick="cnblogs_code_hide('75d0f836-876d-4080-8665-45107778a9e4',event)" style="display: none;"&gt;&lt;div id="cnblogs_code_open_75d0f836-876d-4080-8665-45107778a9e4" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;org.apache.commons.fileupload.&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;javax.faces.context.&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;javax.servlet.http.HttpServletRequest;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;java.util.List;&lt;br /&gt;&lt;br /&gt;@FacesComponent(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;uploadFile.UIUpload&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;UIUpload&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extends&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;UIInput&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;UIUpload()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.setRendererType(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;encodeBegin(FacesContext&amp;nbsp;fc)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;throws&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IOException&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ResponseWriter&amp;nbsp;rw&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;fc.getResponseWriter();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;clientId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.getClientId(fc);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rw.startElement(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;input&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rw.writeAttribute(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;type&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;file&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rw.writeAttribute(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;name&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;clientId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;.file&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rw.endElement(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;input&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;decode(FacesContext&amp;nbsp;fc)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExternalContext&amp;nbsp;external&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;fc.getExternalContext();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpServletRequest&amp;nbsp;request&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(HttpServletRequest)&amp;nbsp;external.getRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;clientId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;getClientId(fc);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(ServletFileUpload.isMultipartContent(request))&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileItemFactory&amp;nbsp;factory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;DiskFileItemFactory();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServletFileUpload&amp;nbsp;upload&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ServletFileUpload(factory);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;nbsp;fileItems&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;upload.parseRequest(request);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;......&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(FileUploadException&amp;nbsp;ex)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;......&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;上传文件的form需要有属性enctype="multipart/form-data"，就像下面这样。cc:uploadfile就是上面那个上传文件的组件。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;h:form&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;enctype&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="multipart/form-data"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;cc:uploadfile&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;h:commandButton&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Submit"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;h:form&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;可是JSF在生成html时，会向form中加入一些&amp;lt;input type="hidden" /&amp;gt;的标签，用来恢复组件树。而&lt;span style="color: #ff0000;"&gt;enctype&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="multipart/form-data"&lt;/span&gt;的form是没法正常提交这些input的，所以组件的decode方法根本就没法执行。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;那么现在唯一可行的方法就是通过system event来处理上传文件。 &lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;f:event&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="preRenderView"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;listener&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="#{bean.getPostFile}"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;JSF已经发展到2.0了，连&amp;lt;input type="file" /&amp;gt;这样最基本的html标签都没有解决，不能不说是个遗憾。除了这个问题外，2.0的改进还是挺大的，我个人最喜欢两点：一是支持get的form和url传值；二是el 2.2的method支持参数。希望Trinidad 2.0和对应的ADF不要让我等太久。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/esestt/aggbug/1774029.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/esestt/archive/2010/07/08/1774029.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
