﻿<?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-JAVA梦想-随笔分类-extremeComponents</title><link>http://www.blogjava.net/lucky/category/7508.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 23:41:03 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 23:41:03 GMT</pubDate><ttl>60</ttl><item><title>eccn小组定制扩展发布</title><link>http://www.blogjava.net/lucky/archive/2006/06/09/51690.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Fri, 09 Jun 2006 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/06/09/51690.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/51690.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/06/09/51690.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/51690.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/51690.html</trackback:ping><description><![CDATA[       目前已经完成了在上篇blog中提到并演示的所有功能   <br />       1） FreeMarker模板的应用<br />       2） 工具条上下位置<br />       3） 是否显示跳转到指定页面下拉框<br />       4） 是否显示表格行数<br />       5） 列的<br />           onclick        点击<br />            onmouseover    鼠标覆盖<br />            onmouseout     鼠标移出<br />            highlight      高亮<br />           。。。。。。<br />       感谢ECCN小组所有成员，特别是差沙和小牧。<br />      <font color="#ff3300"> 大家可以从Sina的免费邮箱中下载，用户名、密码： extremetable ； 如果有谁能提供比较高效、稳定的下载服务器，可与我联系或直接提供下载。                <br /></font>       P.S. 由于本人最近比较忙，关于ec的咨询，如无特急情况请使用Google用户组 http://groups.google.com/group/eXtremeComponents_CN 或在本blog上留言。eccn小组的所有成员将为你解答。也欢迎你share自己的心得和成果。<br />     <br />  <br /><img src ="http://www.blogjava.net/lucky/aggbug/51690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-06-09 15:09 <a href="http://www.blogjava.net/lucky/archive/2006/06/09/51690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ECCN小组成立,以及extremeComponents的相关下载</title><link>http://www.blogjava.net/lucky/archive/2006/05/23/47708.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Tue, 23 May 2006 12:28:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/05/23/47708.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/47708.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/05/23/47708.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/47708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/47708.html</trackback:ping><description><![CDATA[   经过这些天的筹备ECCN小组终于成立了，从今天开始终于可以告别孤军奋斗了，也可以扩展一些很多网友提到的感兴趣的功能了。<br />   ECCN小组现有成员（加入先后顺序）： lucky、差沙、小牧、robin、pesome<br />1)   首次我们要扩展的是很多网友期盼的功能：<br />   1） FreeMarker模板的应用<br />   2） 工具条上下位置<br />   3） 是否显示跳转到指定页面下拉框<br />   4） 是否显示表格行数<br />   5） 列的<br />       onclick        点击<br />        onmouseover    鼠标覆盖<br />        onmouseout     鼠标移出<br />        highlight      高亮<br /><br />   这些功能的flash演示，大家可以从openfans下载：<br />        <a href="http://www.openfans.net:81/upload/swf-features.rar">http://www.openfans.net:81/upload/swf-features.rar</a><span style="color: rgb(0, 0, 0); font-family: 宋体;"><a href="http://openfans.net:81/upload/swf_features.rar"></a><br /><br />  我们正在紧张的整合、测试过程中，相关发布预计6月上旬，敬请期待！<br /><br />2) 提供由ECCN小组发布的extremeComponents的中文参考文档pdf版，基于</span>ECCN小组robin个人学习时使用不同颜色标注重点的版本。对于初次接触extremeComponents的朋友会有很大帮助，希望大家在向我们提出相关的问题前能先花点宝贵的时间看看这份文档。下载地址：<br />     <a target="" class="" title="http://www.openfans.net:81/upload/eXtremeTable中文文档.rar" href="http://www.openfans.net:81/upload/eXtremeTable%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3.rar">http://www.openfans.net:81/upload/eXtremeTable中文文档.rar</a><a href="%20http://openfans.net:81/upload/eXtremeTable%C3%A4%C2%B8%C2%AD%C3%A6%C2%96%C2%87%C3%A6%C2%96%C2%87%C3%A6%C2%A1%C2%A3.rar"><span style="text-decoration: underline;"></span></a><a href="%20http://openfans.net/upload/doc_ecrcn.rar"><span style="text-decoration: underline;"></span></a><a href="http://openfans.net/upload/doc_ecrcn.rar"><span style="color: rgb(0, 0, 0); font-family: 宋体;"></span></a><br />                 <br /><span style="color: rgb(0, 0, 0); font-family: 宋体;">3) 如果大家愿意加入ECCN小组，或者愿意把自己在实际工作中对extremeComponents已经进行的扩展拿出来和大家共享，请和我联系。<br /></span><img src ="http://www.blogjava.net/lucky/aggbug/47708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-05-23 20:28 <a href="http://www.blogjava.net/lucky/archive/2006/05/23/47708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eXtremeComponents发布1.0.1-RC1版</title><link>http://www.blogjava.net/lucky/archive/2006/04/30/44180.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Sun, 30 Apr 2006 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/30/44180.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/44180.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/30/44180.html#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/44180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/44180.html</trackback:ping><description><![CDATA[        eXtremeComponents发布1.0.1-RC1版,大家可以从SourceForge下载（http://sourceforge.net/projects/extremecomp）。<br />        相关的中文文档大家可以从Sina信箱中下载（用户名和密码都是：  extremetable）。<br /><br /><div id="stickies-count" style="display: none;">0</div><img src ="http://www.blogjava.net/lucky/aggbug/44180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-30 13:34 <a href="http://www.blogjava.net/lucky/archive/2006/04/30/44180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>速动画教程第十九集 eXtremeComponents 的基础配置(转自oksonic博客)</title><link>http://www.blogjava.net/lucky/archive/2006/04/23/42679.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Sun, 23 Apr 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/23/42679.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/42679.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/23/42679.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/42679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/42679.html</trackback:ping><description><![CDATA[
		<h1 class="block_title">
				<a id="viewpost1_TitleUrl" href="www.blogjava.net/oksonic/archive/2006/04/22/42552.html">速动画教程第十九集 eXtremeComponents 的基础配置（源地址）</a>
		</h1>
		<div class="postcontent">
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">速动画教程第十九集 </span>
						<b>
								<span style="font-size: 12pt; color: blue; font-family: System;">eXtremeComponents </span>
						</b>
						<span style="font-size: 10pt; font-family: 宋体;">的基础配置<br /><o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p>
										<br />录像下载: <a href="http://sonic.peakle.net/download/sonic019.rar">http://sonic.peakle.net/download/sonic019.rar</a><br /> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">开发环境：<span style="color: blue;">Eclipse 3.1.1<span style="">  </span>MyEclipse 4.1.1<span style="">   </span>Tomcat 5.5</span><o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">此教程参考文章：<span style="color: blue;">http://www.blogjava.net/lucky/archive/2006/02/26/32479.html<o:p></o:p></span></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">先下载发行包 <span style="color: blue;">http://sourceforge.net/projects/extremecomp<o:p></o:p></span></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">将包内的所有 <span style="color: blue;">jar </span>文件拷贝到项目的 <span style="color: blue;">WEB-INF/lib </span>目录中<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">将 <span style="color: blue;">dist </span>目录中的 <span style="color: blue;">extremecomponents.tld</span> 文件拷贝到 <span style="color: blue;">WEB-INF </span><span style="color: black;">中</span><o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">将 <span style="color: blue;">test </span>目录中的 <span style="color: blue;">test.jsp </span>文件拷贝到 <span style="color: blue;">webroot </span>目录中<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">将 <span style="color: blue;">images </span>文件夹拷贝到 <span style="color: blue;">webroot </span>目录中<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">需要对原文件 test.jsp 修改！<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">修改了标签路径<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">然后刷新一下工程，布署工程，起动 <span style="color: blue;">Tomcat </span>打开浏览器，输入 <span style="color: blue;">http://localhost/table/test.jsp </span>进行测试<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">看一下 <span style="color: blue;">test.jsp </span>文件内容<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; font-family: 宋体;">以下是创建一个 <span style="color: blue;">list </span>集合，<span style="color: blue;">list </span>集合中是一组<span style="">  </span><span style="color: blue;">java.util.HashMap </span>集合<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% java.util.List presidents = new java.util.ArrayList(); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% java.util.Map president = new java.util.HashMap(); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("name", "George Washington"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("nickname", "Father of His Country"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("term", "1789-1797"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% presidents.add(president); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president = new java.util.HashMap(); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("name", "John Adams"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("nickname", "Atlas of Independence"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("term", "1797-1801"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% presidents.add(president); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president = new java.util.HashMap(); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("name", "Thomas Jefferson"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("nickname", "Man of the People, Sage of Monticello"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("term", "1801-09"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% presidents.add(president); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president = new java.util.HashMap(); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("name", "James Madison"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("nickname", "Father of the Constitution"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("term", "1809-17"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% presidents.add(president); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president = new java.util.HashMap(); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("name", "James Monroe"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("nickname", "The Last Cocked Hat, Era-of-Good-Feelings President"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("term", "1817-25"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% presidents.add(president); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president = new java.util.HashMap(); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("name", "John Adams"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("nickname", "Old Man Eloquent"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% president.put("term", "1825-29"); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% presidents.add(president); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">&lt;% request.setAttribute("pres", presidents); %&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: black; font-family: 宋体;">以下代码使用</span>
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
						</span>
						<span style="font-size: 10pt; color: blue; font-family: '@宋体';">eXtremeComponents </span>
						<span style="font-size: 10pt; color: black; font-family: 宋体;">的标签来生成表格</span>
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">    </span>&lt;ec:table <o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>items="pres"<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>action="${pageContext.request.contextPath}/test.jsp"<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>imagePath="${pageContext.request.contextPath}/images/table/*.gif"<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>title="Presidents"<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>width="60%"<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>rowsDisplayed="5"<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>&lt;ec:row&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">            </span>&lt;ec:column property="name"/&gt;<span style="">    </span></span>
						<span style="font-size: 10pt; color: black; font-family: 宋体;">
								<span style="">    </span>显示的列</span>
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">            </span>&lt;ec:column property="nickname"/&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">            </span>&lt;ec:column property="term"/&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">        </span>&lt;/ec:row&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<span style="">    </span>&lt;/ec:table&gt;<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: green; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: black; font-family: 宋体;">这集录像的内容很简单，用来测试一下新的录像制作工具！！！<o:p></o:p></span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
						<span style="font-size: 10pt; color: black; font-family: 宋体;">
								<o:p> </o:p>
						</span>
				</p>
				<p>
						<span style="font-size: 10pt; color: black; font-family: 宋体;">bye!!!</span>
				</p>
				<p>
						<br />
						<span style="font-size: 10pt; color: black; font-family: 宋体;">
						</span>
				</p>
				<p>
						<span style="font-size: 10pt; color: black; font-family: 宋体;">lucky：  谢谢速的劳动，大家可以看一下这么样简单使用</span>
						<span style="font-size: 10pt; color: blue; font-family: '@宋体';">eXtremeComponents</span>
						<span style="font-size: 10pt; color: black; font-family: 宋体;">。</span>
				</p>
		</div>
		<div id="stickies-count" style="display: none;">0</div>
		<div id="stickies-count" style="display: none;">0</div>
<img src ="http://www.blogjava.net/lucky/aggbug/42679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-23 17:05 <a href="http://www.blogjava.net/lucky/archive/2006/04/23/42679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eXtremeComponents参考文档-----“后记”</title><link>http://www.blogjava.net/lucky/archive/2006/04/21/42345.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Fri, 21 Apr 2006 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/21/42345.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/42345.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/21/42345.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/42345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/42345.html</trackback:ping><description><![CDATA[
		<p>
				<font size="4">我给eXtremeComponents参考文档加的“后记” ，有什么不妥大家提。明天我给Jeff发。欢迎大家加入</font>Google的
			<a href="http://groups.google.com/group/eXtremeComponents_CN" target="_top">
				eXtremeComponents_CN
			</a>
			用户组。</p>
		<h2 class="title">Chapter 1. 后记</h2>
		<div class="section" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h2 class="title" style="clear: both;">
												<a name="d0e4">
												</a>1.1. 关于本参考文档</h2>
								</div>
						</div>
				</div>
				<p>
			今天上午（2006/04/21）我和Jeff就是否在发行包进行了商量，Jeff的观点是发行包中不包括
			任何形式的文档，使用者可以从eXtremeComponents网站的
			<a href="http://extremecomponents.org/wiki/index.php/Main_Page" target="_top">
				wiki
			</a>
			找到
			相关的文档。wiki是大家一起维护的，内容和相关的修正能够尽快地传递给使用者。但考虑到我们中国程序员的使用习惯，Jeff同意将我以前翻译的参考文档
			包含到发行包中。提示：本文档的部分内容可能不是最新的，请关注eXtremeComponents网站的
			<a href="http://extremecomponents.org/wiki/index.php/Main_Page" target="_top">
				wiki
			</a>
			或者 Google的
			<a href="http://groups.google.com/group/eXtremeComponents_CN" target="_top">
				eXtremeComponents_CN
			</a>
			用户组。当然，你也可以在我 的
			<a href="../../lucky" target="_top">blog</a>
			中找到更新升级的提示。所有发行包中没有包含的文档，都能在上述3个地方找到。
		</p>
		</div>
		<div class="section" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h2 class="title" style="clear: both;">
												<a name="d0e21">
												</a>1.2. 关于eXtremeComponents的学习</h2>
								</div>
						</div>
				</div>
				<p>我的建议：</p>
				<div class="orderedlist">
						<ol type="1">
								<li>浏览相关的概述章节确认这是你需要的东西</li>
								<li>参照配置章节，运行test.jsp</li>
								<li>快速浏览相关的文档</li>
								<li>
				结合《参考指南》学习
				<a href="http://www.extremecomponents.org/extremesite/public/download/eXtremeSite.zip" target="_top">
					eXtremeSite
				</a>
				中的相关示例
			</li>
								<li>
				从一个实际的开源工程
				<a href="http://www.springside.org.cn/" target="_top">
					SpringSide
				</a>
				中，学习eXtremeComponents的用法
			</li>
						</ol>
				</div>
		</div>
		<div class="section" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h2 class="title" style="clear: both;">
												<a name="d0e43">
												</a>1.3. 关于使用eXtremeComponents中的问题</h2>
								</div>
						</div>
				</div>
				<p>如果你在使用eXtremeComponents时遇到了一些问题，你可以：</p>
				<div class="orderedlist">
						<ol type="1">
								<li>浏览上面提到的3个站点，特别是Wiki中的FAQ看是否和其中的现象一致</li>
								<li>如果没有找到答案，尝试google或者baidu一下</li>
								<li>
				如果仍然没有找到答案，可以在Google的
				<a href="http://groups.google.com/group/eXtremeComponents_CN" target="_top">
					eXtremeComponents_CN
				</a>
				用户组、我 的
				<a href="../../lucky" target="_top">blog</a>
				中留言。我将尽快回复。
			</li>
								<li>如果你的项目时间很紧，你可以与我直接MSN联系： zlh326@msn.com</li>
						</ol>
				</div>
		</div>
		<div class="section" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h2 class="title" style="clear: both;">
												<a name="d0e63">
												</a>1.4. 关于如何询问使用eXtremeComponents的问题</h2>
								</div>
						</div>
				</div>
				<p>
			eXtremeComponents报错了(特别是在正式项目中)，大家都很着急。我们都希望尽快解决这其中的问题，因此，在
			你寻求相关的帮助时，请提供：
		</p>
				<div class="orderedlist">
						<ol type="1">
								<li>相关的错误信息</li>
								<li>如果不涉及商业秘密，请提供使用eXtremeComponents出错的相关文件</li>
								<li>出错时生成的html代码</li>
								<li>如果可能，提供相关错误的抓图</li>
						</ol>
				</div>
				<p>以便我们能尽早帮你排除问题。</p>
		</div>
		<div class="section" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h2 class="title" style="clear: both;">
												<a name="d0e79">
												</a>1.5. 关于创建eXtremeComponents的子工程</h2>
								</div>
						</div>
				</div>
				<p>
			eXtremeComponents具有良好的扩展性，一直打算基于eXtremeComponents的发布版的代码进行一些扩展定制开发。今天和Jeff商量
			的结果是：eXtremeComponents的M5发布后的一段时期，会用来补充文档和修正bug。这段时间我们可以用来进行我们的定制开发，目前
			我打算进行的扩展：
		</p>
				<div class="orderedlist">
						<ol type="1">
								<li>FreeMarker模板的支持</li>
								<li>Velocity模板的支持</li>
								<li>PDF导出的iText支持</li>
								<li>适合国情的一些css，cell、Filter。。。</li>
						</ol>
				</div>
				<p>目前，开发、测试人员招募中。如果大家对这些感兴趣可以和我联系，你也可以向我们贡献你的代码。</p>
				<p>
			本子工程遵循使用eXtremeComponents所采用的开源协议---Apache 2.0 开源协议。
		</p>
		</div>
		<div class="section" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h2 class="title" style="clear: both;">
												<a name="d0e97">
												</a>1.6. 个人推荐</h2>
								</div>
						</div>
				</div>
				<div class="orderedlist">
						<ol type="1">
								<li>
										<a href="http://www.openfans.net/" target="_top">openfans：</a>
				希望通过这个网站为开源软件在中国的传播和使用尽一份自己的力量。定于“五.一”前发布。
			</li>
								<li>
										<a href="http://www.hellopen.net/" target="_top">hellopen：</a>
				openfans成员zidoing开发的openfans的RoR版，对RoR感兴趣的朋友可以看看
			</li>
								<li>
										<a href="http://www.springside.org.cn/" target="_top">SpringSide：</a>
				江南白衣领导的SpringSide，以Spring Framework为核心，
				提供一个Pragmatic的企业应用开发基础和最佳实践展示。除了学习其中的eXtremeComponents的用法
				外，也可以学习到其他新框架、工具包。
			</li>
						</ol>
				</div>
		</div>
		<div id="stickies-count" style="display: none;">0</div>
<img src ="http://www.blogjava.net/lucky/aggbug/42345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-21 16:21 <a href="http://www.blogjava.net/lucky/archive/2006/04/21/42345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eXtremeComponents相关</title><link>http://www.blogjava.net/lucky/archive/2006/04/20/42126.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Thu, 20 Apr 2006 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/20/42126.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/42126.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/20/42126.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/42126.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/42126.html</trackback:ping><description><![CDATA[    这些天事情比较多，比较杂。关于eXtremeComponents<br />    1） 星期六和Jeff一起修正了，白衣提出的eXtremeComponents使用limit时的一个问题： limit的sort的property属性，返回的是这个属性的alias。现在改为，Sort里增加一个alias属性，这样的话既可以返回alias，又能得到property<br />    2） extremeComponents的发布版，不会再带文档，大家要参考的话可以访问wiki。“<span class="q">I am hoping that by having it on the wiki
that more people will make corrections and add on to it. </span>”  ，不过考虑到咱们的习惯，我现在还在和Jeff商量。如果不行的话，我在wiki里提供下载地址。不过大家能上网的话，还是建议大家看wiki或者我的blog，因为很多更新或修正，没法在发布的文档中反应。这也是我为什么不提供参考文档下载的一个原因。<br />   3）我在google上建了一个组：eXtremeComponents_CN<br />        eXtremeComponents_CN是eXtremeComponents的中国用户组,主要宗旨: <br />             a. 帮助中文开发人员解决使用eXtremeComponents中出现的问题 <br />             b. eXtremeComponents的扩展定制开发的组织、讨论、实施<br />      创建这个组一是帮助国内开发人员的交流问题，二是帮助Jeff分摊一些压力。关于b 现在只是我的一个想法，现在也正在与Jeff商量。所以这个组现在的主要目标是a。<br />      当然如果大家在<font color="#ff0000"><b>项目时间很紧</b></font>的情况下，也可以在线和我联系。<br />      我的MSN： zlh326@msn.com<br />            email： xplucky@gmail.com<br />      <br /><div id="stickies-count" style="display: none;">0</div><img src ="http://www.blogjava.net/lucky/aggbug/42126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-20 11:21 <a href="http://www.blogjava.net/lucky/archive/2006/04/20/42126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven2　介绍</title><link>http://www.blogjava.net/lucky/archive/2006/04/12/40746.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Wed, 12 Apr 2006 15:14:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/12/40746.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/40746.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/12/40746.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/40746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/40746.html</trackback:ping><description><![CDATA[
		<div class="chapter" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h2 class="title">
												<a name="d0e44">
												</a>Chapter 1. Maven2</h2>
								</div>
						</div>
				</div>
				<div class="section" lang="en">
						<div class="titlepage">
								<div>
										<div>
												<h2 class="title" style="clear: both;">
														<a name="d0e47">
														</a>1.1. Maven2 
体验</h2>
										</div>
								</div>
						</div>
						<p>
								<span class="emphasis">
										<em>声明:本节内容来源于<a href="/jbob/" target="_top">blogjava网站jbob的blog</a> 本节的版权归原作者所有，不适用本手册的版权申明。</em>
								</span>
						</p>
						<p>maven是一个java项目管理工具，深化了ant，但又有自己一整套的项目集成策略。目前的版本是2.0.2。 </p>
						<div class="orderedlist">
								<ol type="1">
										<li>
												<p>
														<a href="http://maven.apache.org/" target="_top">maven网站 </a>下载maven2，解压缩 </p>
										</li>
										<li>
												<p>配置环境变量:maven_home、path</p>
										</li>
										<li>
												<p>cmd-&gt; mvn --version 检查是否安装成功 [显示版本号，则说明安装成功] </p>
										</li>
										<li>
												<p>配置,Maven的配置分为三个层次:</p>
												<div class="itemizedlist">
														<ul type="bullet">
																<li style="list-style-type: disc;">
																		<p>- pom.xml:针对某个项目的配置</p>
																</li>
																<li style="list-style-type: disc;">
																		<p>Installation</p>
																</li>
																<li style="list-style-type: disc;">
																		<p>User -针对某个用户的配置</p>
																</li>
														</ul>
												</div>
												<p>我们首先配置主要是user级别的，主要包括两点:设置本地的资源库和代理服务器[如果需要的话] 
在%maven_home%/conf/setting.xml中配置: </p>
												<pre class="programlisting">					&lt;localRepository&gt;d:/repo&lt;/localRepository&gt;<br /></pre>
												<pre class="programlisting">					&lt;proxy&gt;<br />						&lt;id&gt;proxy1&lt;/id&gt;<br />						&lt;active&gt;true&lt;/active&gt;<br />						&lt;protocol&gt;http&lt;/protocol&gt;<br />						&lt;username&gt;&lt;/username&gt;<br />						&lt;password&gt;&lt;/password&gt;<br />						&lt;host&gt;222.136.91.1&lt;/host&gt;<br />						&lt;port&gt;80&lt;/port&gt;<br />						&lt;nonProxyHosts&gt;&lt;/nonProxyHosts&gt;<br />					&lt;/proxy&gt;<br /></pre>
												<p>修改之后copy一份到${home}/.m2</p>
										</li>
										<li>
												<p>建立新的项目</p>
												<pre class="programlisting">					mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app<br /></pre>
												<div class="itemizedlist">
														<ul type="bullet">
																<li style="list-style-type: disc;">
																		<p>首先，程序会从远程下载必要的jar包到你的localRepository,即我们刚刚设置的[d:/repo] </p>
																</li>
																<li style="list-style-type: disc;">
																		<p>然后，会在当前目录下面生成my-app文件夹，包括简单的包结构[java,test]和一个HelloWorld程序及测试,以及pom.xml文件。 
</p>
																</li>
														</ul>
												</div>
												<p>注意：pom.xml contains the Project Object Model (POM) for this project.The POM 
is the basic unit of work in Maven。 </p>
										</li>
										<li>
												<p>编译</p>
												<pre class="programlisting">mvn compile</pre>
												<p>第一次运行会下载很多jar包,而且机器负荷会很重。运行这个命令需要在pom.xml相同目录下面, 
这个编译只编译主程序，不会编译test下面的程序。如果需要单独编译test,请运行：</p>
												<pre class="programlisting">mvn test-compile</pre>
												<p>compile之后会生成target文件夹，主程序编译在classes下面，测试程序放在test-classes下</p>
										</li>
										<li>
												<p>测试</p>
												<pre class="programlisting">mvn test</pre>
												<p>会自动先编译再运行测试</p>
										</li>
										<li>
												<p>打包</p>
												<pre class="programlisting">mvn package</pre>
												<p>打包之前会进行编译，测试</p>
										</li>
										<li>
												<p>安装</p>
												<pre class="programlisting">mvn install</pre>
												<p>会将package之后的jar包copy到</p>&lt;local-repository&gt;/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar 

</li>
										<li>
												<p>其他</p>
												<pre class="programlisting">mvn site</pre>
												<p>注意,还可以:</p>
												<pre class="programlisting">deploy site</pre>
												<p>在pom.xml中加入</p>
												<pre class="programlisting"> &lt;distributionManagement&gt;<br />    &lt;site&gt;<br />      &lt;id&gt; website &lt;/id&gt;<br />         &lt; url&gt; scp://www.mycompany.com/www/docs/project/ &lt;/url&gt;<br />    &lt;/site&gt;<br />  &lt;/distributionManagement&gt;<br /></pre>
												<p>当然你需要设置server</p>
												<pre class="programlisting">mvn site-deploy<br />mvn clean<br />mvn idea:idea [为IDE工具idea生成项目文件]<br /></pre>
										</li>
										<li>
												<p>Resource</p>
												<p>${basedir}/src/main/resources都会编译到jar文件中,而且该目录下的内容将直接位于jar文件的顶部。</p>
												<p>测试用资源文件-&gt; ${basedir}/src/test/resources，引用时如下例：</p>
												<pre class="programlisting">InputStream is = getClass().getResourceAsStream( "/test.properties" );<br /></pre>
												<p>文件位于 ${basedir}/src/test/resources/test.properties。</p>
										</li>
										<li>
												<p>如何filter我们的资源文件</p>
												<pre class="programlisting">   &lt; build &gt;<br />     &lt; resources &gt;<br />       &lt; resource &gt;<br />         &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />         &lt; filtering &gt; true &lt;/ filtering &gt;<br />       &lt;/ resource &gt;<br />     &lt;/ resources &gt;<br />   &lt;/ build &gt;<br /></pre>
												<p>因为原来默认的filter为false所以要加上上面的代码</p>
												<p>eg:我们在src/main/resources下面建立application.properties文件</p>
												<pre class="programlisting"># application.properties<br /> application.name=${pom.name}<br /> application.version=${pom.version}<br /></pre>
												<p>运行：mvn process-resources 在target/classes下面的application.properties结果为：</p>
												<pre class="programlisting"> # application.properties<br /> application.name=Maven Quick Start Archetype<br /> application.version=1.0-SNAPSHOT<br /></pre>
												<p>这就是所谓的filter。当然filter还可以用其他的外部文件，不一定来自pom.xml[ ${pom.name} ]以及setting.xml[ 
${settings.localRepository }] </p>
												<p>e.g src/main/filters/filter.properties:</p>
												<pre class="programlisting"># filter.properties<br /> my.filter.value=hello!<br /></pre>
												<p>pom.xml:</p>
												<pre class="programlisting"> &lt; build &gt;<br />     &lt; filters &gt;<br />       &lt; filter &gt; src/main/filters/filter.properties &lt;/ filter &gt;<br />     &lt;/ filters &gt;<br />     &lt; resources &gt;<br />       &lt; resource &gt;<br />         &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />         &lt; filtering &gt; true &lt;/ filtering &gt;<br />       &lt;/ resource &gt;<br />     &lt;/ resources &gt;<br />   &lt;/ build &gt; </pre>
												<p># application.properties</p>
												<pre class="programlisting">application.name=${pom.name}<br />application.version=${pom.version}<br />message=${my.filter.value}<br /></pre>
												<p>这样在运行mvn process-resources 会得到类似的效果,当然我们也可以直接在pom.xml中定义：</p>
												<pre class="programlisting">&lt; build &gt;<br />     &lt; resources &gt;<br />       &lt; resource &gt;<br />         &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />         &lt; filtering &gt; true &lt;/ filtering &gt;<br />       &lt;/ resource &gt;<br />     &lt;/ resources &gt;<br />   &lt;/ build &gt;<br />   &lt; properties &gt;<br />     &lt; my .filter.value &gt; hello &lt;/ my.filter.value &gt;<br />   &lt;/ properties &gt; </pre>
												<p>效果同样，这样就不需要外部文件了。另外filter还可以来自系统设置以及可以自定义：</p>
												<pre class="programlisting"># application.properties<br />java.version=${java.version}<br />command.line.prop=${command.line.prop}<br /></pre>
										</li>
										<li>
												<p>jar包依赖</p>
												<p>我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用</p>
												<pre class="programlisting">&lt;dependency&gt;<br />      &lt;groupId&gt;com.mycompany.app&lt;/groupId&gt;<br />      &lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />      &lt;scope&gt;compile&lt;/scope&gt;<br />&lt;/dependency&gt;</pre>
												<p>注意scope,这里是compile,如果使用junit，scope是test。</p>
												<p>举例说明：如果我们的project需要用到log4j包，那么我们可以 先google--"site:www.ibiblio.org maven2 
log4j"。Index of /maven2/log4j/log4j 下面有maven-metadata.xml 
描述了groupId,artifactId,version等等。获取了这些信息之后，你 就可以在pom.xml中添加依赖</p>
												<pre class="programlisting">&lt;dependency&gt;<br />      &lt;groupId&gt;log4j&lt;/groupId&gt;<br />      &lt;artifactId&gt;log4j&lt;/artifactId&gt;<br />      &lt;version&gt;1.2.12&lt;/version&gt;<br />      &lt;scope&gt;compile&lt;/scope&gt;<br />&lt;/dependency&gt;</pre>
										</li>
										<li>
												<p>如何发布我的jar包到我的remote repository</p>
												<p>你需要在setting.xml中间设置server:</p>
												<pre class="programlisting">&lt;servers&gt;<br />    &lt;server&gt;<br />      &lt;id&gt;mycompany-repository&lt;/id&gt;<br />      &lt;username&gt;jvanzyl&lt;/username&gt;<br />      &lt;!-- Default value is ~/.ssh/id_dsa --&gt;<br />     &lt;privateKey&gt;/path/to/identity&lt;/privateKey&gt;<br />         &lt;passphrase&gt;my_key_passphrase&lt;/passphrase&gt;<br />    &lt;/server&gt;<br />&lt;/servers&gt;</pre>
												<p>然后在pom.xml中设置远程url:</p>
												<pre class="programlisting">&lt;distributionManagement&gt;<br />    &lt;repository&gt;<br />      &lt;id&gt;mycompany-repository&lt;/id&gt;<br />      &lt;name&gt;MyCompany Repository&lt;/name&gt;<br />     &lt;url&gt;scp://repository.mycompany.com/repository/maven2&lt;/url&gt;<br />    &lt;/repository&gt;<br />  &lt;/distributionManagement&gt;</pre>
										</li>
								</ol>
						</div>
				</div>
				<div class="section" lang="en">
						<div class="titlepage">
								<div>
										<div>
												<h2 class="title" style="clear: both;">
														<a name="d0e228">
														</a>1.2. Maven2的Eclipse插件安装和使用</h2>
										</div>
								</div>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h3 class="title">
																<a name="d0e231">
																</a>1.2.1. 安装</h3>
												</div>
										</div>
								</div>
								<p>你可以从<a href="http://m2eclipse.codehaus.org/" target="_top">http://m2eclipse.codehaus.org</a>update安装Maven2的Eclipse插件，具体 
安装步骤请看该网站提供的Flash Demo: <a href="http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html" target="_top">http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html</a></p>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h3 class="title">
																<a name="d0e241">
																</a>1.2.2. 使用</h3>
												</div>
										</div>
								</div>
								<p>该插件的使用请看该网站提供的Flash Demo: <a href="http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html" target="_top">http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html</a></p>
								<p>关于openfan项目的Maven操作请参看后续章节。</p>
						</div>
				</div>
				<div class="section" lang="en">
						<div class="titlepage">
								<div>
										<div>
												<h2 class="title" style="clear: both;">
														<a name="d0e250">
														</a>1.3. 更多的Maven2的参考</h2>
										</div>
								</div>
						</div>
						<div class="itemizedlist">
								<ul type="bullet">
										<li style="list-style-type: disc;">
												<p>
														<a href="http://maven.apache.org/" target="_top">Maven 网站</a>
												</p>
										</li>
										<li style="list-style-type: disc;">
												<p>
														<a href="http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/" target="_top">developerWorks 中国：Maven2 的新特性</a>
												</p>
										</li>
										<li style="list-style-type: disc;">
												<p>
														<a href="http://blog.donews.com/woodstudio/archive/2006/01/31/712379.aspx" target="_top">木头工作室：Maven快速入门</a>
												</p>
										</li>
								</ul>
						</div>
				</div>
		</div>
		<div id="stickies-count" style="display: none;">0</div>
		<div id="stickies-count" style="display: none;">0</div>
<img src ="http://www.blogjava.net/lucky/aggbug/40746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-12 23:14 <a href="http://www.blogjava.net/lucky/archive/2006/04/12/40746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eXtremeComponents M5 Release升级说明（A8）</title><link>http://www.blogjava.net/lucky/archive/2006/04/09/40101.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Sun, 09 Apr 2006 08:01:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/09/40101.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/40101.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/09/40101.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/40101.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/40101.html</trackback:ping><description><![CDATA[    <font color="#0000ff"><font size="4">   </font><font size="5"><font size="4">A8是eXtremeComponents正式Relese前的最后一个开发者版，现在eXtremeComponents的code工作已经全部结束，在Release之前的工作是完善eXtremeComponents的文档、指南和javadocs。所以请广大网友协助测试一下我前篇“<a id="_32a18c456d95_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" class="postTitle2" href="../archive/2006/04/08/40004.html">eXtremeComponents导出时的中文文件名问题</a>”中提到的中文文件名的问题，以便我能尽快提交，使得能够随着正式版一起Release。</font></font><br />        </font><br /><h2><a href="http://extremecomponents.org/wiki/index.php/Simplified_Chinese_Development_Release" title="Simplified Chinese Development Release">开发者版</a></h2><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E5.BC.80.E5.8F.91.E5.BF.AB.E7.85.A7.E7.89.88"></a><h5> 开发快照版 </h5><p><a href="http://extremecomponents.org/extremesite/public/download/extremecomponents-1.0.1-M5-A8.zip" class="external text" title="http://extremecomponents.org/extremesite/public/download/extremecomponents-1.0.1-M5-A8.zip" rel="nofollow">extremecomponents-1.0.1-M5-A8</a>（下载） 是正式版发行前的最后开发快照版。这个build版所使用的代码将被下一个release版沿用。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="1.0.1-M5-A8"></a><h5> 1.0.1-M5-A8 </h5><p><i>我决定发布一个新的里程碑(milestone)版是因为我对视图(view)的代码做了一些调整，现在eXtremeTable将能够支持AJAX(而不是局部build)。 在确认release候选版前，这些增加的大的特性能够完美地工作。</i></p><p>下面列出的是eXtremeTable下一个里程碑（milestone）版特性和改进，我希望从上一个里程碑版升级到现在这版没有任何问
题（breakage）。
然而，在完成M4版视图实现后，我决定我必须做最后的更改...将静态builders变为具体的类。这将是唯一可能出现问题(breakage)并且
将只影响到定制视图(定制cells也一样，但是更多的是较平和的deprecated)。尽管那样，这些更改将很容易实现。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="Html_Builder.E7.B1.BB.E5.85.B7.E4.BD.93.E5.8C.96"></a><h4> Html Builder类具体化 </h4><p>所有的视图builder类具体化，需要被实例化，这些只对开发者需要创建定制试图或cells有影响。
这是因为需要使得视图代码能够像他们需要的那样具有弹性。builder classes是静态的能够很好地工作，但是
将来没有机会来做一些有意义的事，并且创建定制试图更加麻烦。然而，现在这些方法和原来的一样，而仅仅是需要对它进行实例化。 </p><p>为了使这种转变更容易CellBuilder仍然是静态的，但是现在为deprecated。新的(非静态)builder称为ColumnBuilder，通过这个名称我们能更确切地知道什么被构建了。
</p><pre>    public String getHtmlDisplay(TableModel model, Column column) {<br />        ColumnBuilder columnBuilder = new ColumnBuilder(column);<br />        columnBuilder.tdStart();<br />        columnBuilder.tdBody(getCellValue(model, column));<br />        columnBuilder.tdEnd();<br />        return columnBuilder.toString();<br />    }<br /></pre><p>另一个例子，使用ColumnBuilder定制cells如下：
</p><pre> public String getHtmlDisplay(TableModel model, Column column) {<br />        InputBuilder inputBuilder = new InputBuilder(column);<br />        inputBuilder.tdStart();<br /><br />        try {<br />            Object bean = model.getCurrentRowBean();<br />            Integer id = new Integer(BeanUtils.getProperty(bean, "id"));<br />            inputBuilder.tdBody(id);<br /><br />        } catch (Exception e) {}<br /><br />        inputBuilder.tdEnd();<br /><br />        return inputBuilder.toString();<br />    }<br /><br />    private static class InputBuilder extends ColumnBuilder {<br />        public InputBuilder(Column column) {<br />            super(column);<br />        }<br /><br />        public void tdBody(Integer id) {<br />            getHtmlBuilder().input("radio").name("location.id").id("location.id").value(id.toString()).onclick("populateLocationFields(this.value)");<br />            getHtmlBuilder().xclose();<br />        }<br />    }<br /> } <br /></pre><p>这样更简洁，只需要扩展你关心的builder，并构建你定制的实现。
</p><p>另外toolbar被完全重构，但是这个实现被隐藏在ToolbarBuilder类的背后，所以不会有影响。
</p><p>最后，我探索性地增加了toolbar特性，这样可以在preferences配置表关联到不同的toolbars。
这个特性能够用来动态构造toolbar。这将使开发者很简单地通过preferences来定义一个定制的toolbar。
例如，一个toolbar当使用Limit定制不包含最后一页按钮，或者另一个toolbar不包含rows displayed...
如果你要定制的就是这些东西而不需要别的新的特性，你最好等待一两个星期直到我实现完成。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E6.96.B0.E7.9A.84.E8.A1.A8.E7.9A.84showTitle.E5.B1.9E.E6.80.A7"></a><h4> 新的表的showTitle属性 </h4><p>TableTag新的showTitle属性用来确认是否现实title，这是一个boolean值默认为true。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="Limit.E7.8E.B0.E5.9C.A8.E8.83.BD.E4.BD.BF.E7.94.A8State.E7.89.B9.E6.80.A7"></a><h4> Limit现在能使用State特性 </h4><p>Limit特性为了使用State特性，你需要使用TableLimitFactory的带有state的构造函数，当使用state 特性时，你应该提供唯一的tableId（本例为presidents），带有state的构造函数同时也需要这个tableId。
</p><pre>    Context context = new HttpServletRequestContext(request);<br />    LimitFactory limitFactory = new TableLimitFactory(context, presidents, TableConstants.STATE_PERSIST, null);<br />    Limit limit = new TableLimit(limitFactory);<br /></pre><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E6.96.B0.E7.9A.84.E5.88.97.E7.9A.84filterOptions.E5.B1.9E.E6.80.A7.2FFilterOption.E6.8E.A5.E5.8F.A3"></a><h4> 新的列的filterOptions属性/FilterOption接口 </h4><p>TableTag新的filterOptions属性，能够接受一个filter
options的集合，这个集合中的每个bean都实现FilterOption的
接口。被用来和filterCell=droplist结合，当使用Limit时使用定制droplist时非常有用。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E5.AF.BC.E5.87.BAEXCLE.E6.96.87.E4.BB.B6.E6.97.B6.E7.9A.84.E6.9C.AC.E5.9C.B0.E8.AF.AD.E8.A8.80.E7.9A.84.E6.94.AF.E6.8C.81"></a><h4> 导出EXCLE文件时的本地语言的支持 </h4><p>默认的XlsView使用UTF-16编码，这样能够支持对于双字节语言导出。如果要使用unicode，你可以设置 ExportTag的新的encoding属性，这个属性接受的值为：UTF和UNICODE。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E5.88.A0.E9.99.A4Compact.E8.A7.86.E5.9B.BE.E7.9A.84title.E7.9A.84style"></a><h4> 删除Compact视图的title的style </h4><p>当使用compact视图是我硬编码了表的title，这是一个bug。只需要通过CSS的titleRow属性style（或移走）title。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="TableModel.E7.8E.B0.E5.9C.A8.E5.8F.98.E4.B8.BA.E6.8E.A5.E5.8F.A3"></a><h4> TableModel现在变为接口 </h4><p>TableModel现在变为接口，这只对TableAssembler产生影响。然而，正如下面提到的，使用Java代码来组装一个表将更容易。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="TableAssembler.E6.95.B4.E5.90.88.E5.88.B0TableModel"></a><h4> TableAssembler整合到TableModel </h4><p>当使用Java代码来组装一个表将更容易：
</p><pre>    TableModel model = new TableModelImpl(context);<br /><br />    Table table = new Table(model);<br />    table.setItems(presidents);<br />    table.setAction("assembler.run");<br />    table.setTitle("Presidents");<br />    table.setShowTooltips(Boolean.FALSE);<br />    model.addTable(table);<br /><br />    Row row = new Row(model);<br />    row.setHighlightRow(Boolean.FALSE);<br />    model.addRow(row);<br /><br />    Column columnName = new Column(model);<br />    columnName.setProperty("fullName");<br />    columnName.setIntercept((AssemblerIntercept.class).getName());<br />    model.addColumn(columnName);<br /><br />    Column columnNickName = new Column(model);<br />    columnNickName.setProperty("nickName");<br />    model.addColumn(columnNickName);<br /><br />    Object view = model.assemble();<br /></pre><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E9.87.8D.E5.91.BD.E5.90.8DFilterSet.getValue.28.29.E6.96.B9.E6.B3.95"></a><h4> 重命名FilterSet.getValue()方法 </h4><p>FilterSet.getValue()方法被Deprecated，重命名为FilterSet.getFilterValue()。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E5.88.A0.E9.99.A4TableTag.E7.9A.84onsubmit"></a><h4> 删除TableTag的onsubmit </h4><p>onsubmit被删除，因为javascript被表的所有actions使用。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E6.80.BB.E8.AE.A1.E5.AF.BC.E5.87.BA"></a><h4> 总计导出 </h4><p>PDF和XLS现在包含总计导出，你只需要和平常一样设置Calc特性。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E5.AF.BC.E5.87.BA.E9.94.99.E8.AF.AF-Response.E5.A4.B4.E4.BF.AE.E6.94.B9"></a><h4> 导出错误-Response头修改 </h4><p>过滤器的response头应该能更好地适应不同环境，在response头后添加：
</p><pre> response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");<br /></pre><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E5.88.97.E6.A0.87.E7.AD.BEautoGenerateColumns.E7.9A.84Preferences"></a><h4> 列标签autoGenerateColumns的Preferences </h4><p>autoGenerateColumns属性现在可以在Preferences文件中配置，可以使用别名来避免全路径引用。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E8.87.AA.E5.8A.A8.E8.BD.AC.E6.8D.A2.E5.8F.82.E6.95.B0"></a><h4> 自动转换参数 </h4><p>Registry能够接受null、String、List或者Array作为参数，Registry将把这些转换成String[]。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E8.A1.A8.E7.9A.84bufferView.E5.B1.9E.E6.80.A7"></a><h4> 表的bufferView属性 </h4><p>表的bufferView属性，默认为true将使用视图的默认buffer。如果不需要使用buffer可以设置为false。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="eXtremeTable.E7.9A.84AJAX.E7.89.B9.E6.80.A7"></a><h4> eXtremeTable的AJAX特性 </h4><p>当使用eXtremeTable API来通过JAVA代码来创建表时，现在可以结合AJAX技术来生成视图。这意味着
当navigate（比如：翻页）时不需要刷新web页，这令人非常兴奋，关于这个特性的更多的文档将会出来。开发
者能够更好地测试并使用这个特性，这个特性的真正hook是表的onInvokeAction属性，它使得javascript方法
能够被invoked。AJAX整合一个最强大的地方是它不需要整合。下一步是使eXtremeTable有一个清晰并且易于使用的API，
这意味着你可以使用你感兴趣的AJAX技术因为eXtremeTable没有整合一个特定的技术。现在你可以通过CVS得到eXtremeSite代码，
它展示了一个使用AJAX的实例，它现在使用HSQL所以只需要下载并直接运行。请暂时不要向我询问更多的文档，我现在正在整理
并将尽可能快的发布出来。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E8.A1.A8.E7.9A.84items.E5.8F.AF.E4.BB.A5.E4.BD.BF.E7.94.A8Map"></a><h4> 表的items可以使用Map </h4><p>表的Items可以使用Map(values)，因此可以使用不使用Collection而使用一些key来快速构造。 这个特性正是一个eXtremeComponents使用者需要的。我想这将是一个有趣的特性所以决定在下一个release中发布!
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E5.8F.AF.E4.BB.A5.E5.AE.9A.E4.B9.89.E8.B6.85.E8.BF.87.E4.B8.80.E4.B8.AA.E6.98.BE.E7.A4.BA.E7.9A.84.E8.A1.8C.E6.95.B0.EF.BC.88rows_displayed.EF.BC.89.EF.BC.89"></a><h4> 可以定义超过一个显示的行数（rows displayed）） </h4><p>现在可以定义超过一个显示的行数（rows displayed）。这使得在eXtremeTable顶部和底部定义相同的工具条成为可能。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="Parameter.E5.8F.82.E6.95.B0.E7.9A.84.E6.9B.B4.E5.A4.9A.E5.8F.98.E5.8C.96"></a><h4> Parameter参数的更多变化 </h4><p>Parameter特性能更好地支持Arrays、Lists、String和其他一些具有toString()的java对象，具有toString（）函数能够转换成一个String数组（array），例如：Number。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E4.BF.AE.E6.AD.A3Export_viewResolver.E5.B1.9E.E6.80.A7.E6.B2.A1.E6.9C.89.E8.A2.AB.E5.8F.82.E7.85.A7"></a><h4> 修正Export viewResolver属性没有被参照 </h4><p>修正Export viewResolver属性没有被真正使用的bug。这使得定制导出时不需要设置view和viewResolver为相同的命名，而可以给出ViewResolver的全路径或者在配置中配置它的别名。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E4.BF.AE.E6.AD.A3.E5.9C.A8.E5.90.8C.E4.B8.80.E4.B8.AAform.E4.B8.AD.E4.BD.BF.E7.94.A8.E4.B8.A4.E4.B8.AAeXtremeTables.E6.97.B6.E5.AF.BC.E5.87.BA.E7.9A.84.E9.97.AE.E9.A2.98"></a><h4> 修正在同一个form中使用两个eXtremeTables时导出的问题 </h4><p>修正在同一个form中使用两个eXtremeTables时导出的问题，现在他们能够互不干扰分别导出。我只是重新组织表实例
（instance）参数(现在命名ec_eti为导出表的id)，这个参数需要被同一个form中的不同表共享，每次request时候被重新设置
（reset）。
</p><p>如果form还包含其他的按钮（buttons）被条用，导出完毕后你需要调用resetExportParameters(form,
action)，它包含在extremecomponents.js文件中。第一个参数是当前的form，第二个参数是form的action。这个是因
为导出使用javaScript进行调用,没有别的办法重新自动reset它。
resetExportParameters做的就是将导出表的id置为空(null),并且将form
action设置为原来的值。这很不幸，但是我想不出别的处理方法。
</p><p>Note: 这个修正也关系到State特性。当使用State设置为persist时，导出也会出现问题。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="table.imagePath.E9.85.8D.E7.BD.AE.28preference.29.E6.B7.BB.E5.8A.A0.E4.B8.8A.E4.B8.8B.E6.96.87.E8.B7.AF.E5.BE.84.EF.BC.88contextPath_.EF.BC.89"></a><h4> table.imagePath配置(preference)添加上下文路径（contextPath ） </h4><p>如果table.imagePath的上下文路径(context
path)没有在配置文件(Preferences)中指定，那么将给它自动指定一个。然而，如果路径以表示绝对路径“/”开始，将只给它提供一个上下文
(context)而上下文(contextPath)并没有插入。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name=".E4.BD.BF.E7.94.A8javascript.E8.AE.BE.E7.BD.AEform.E7.9A.84method.E5.B1.9E.E6.80.A7"></a><h4> 使用javascript设置form的method属性 </h4><p>当翻页、过滤、排序时将使用javascript来设置form的method属性。以前只是设置了form的action属性，为了完整性现在也设置了form的method属性。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="Bullet_Proof_Limit_feature"></a><h4> Bullet Proof Limit feature </h4><p>如果传入不正确的数据到LimitCallback时，Limit只记录（log）并显示一个警告（warning）。
</p><div class="editsection" style="float: right; margin-left: 5px;"></div><a name="Intercept.E8.A2.AB.E9.87.8D.E5.91.BD.E5.90.8D.E4.B8.BAInterceptor"></a><h4> Intercept被重命名为Interceptor </h4><p>intercept特性被重命名为interceptor。因此我们现在的interceptors有：TableInterceptor、
RowInterceptor、ExportInterceptor和ColumnInterceptor。他们现在在interceptor包中。遍更
的原因是intercept不如interceptor能给大家提供一种表明他们作用更好的直觉。我不向提供一种我不喜欢的命名。然而，这些方法名都一样
所以能够将他们集中到一个正确的包中。
</p><div id="stickies-count" style="display: none;">0</div><div id="stickies-count" style="display: none;">0</div><img src ="http://www.blogjava.net/lucky/aggbug/40101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-09 16:01 <a href="http://www.blogjava.net/lucky/archive/2006/04/09/40101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eXtremeComponents导出时的中文文件名问题</title><link>http://www.blogjava.net/lucky/archive/2006/04/08/40004.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Sat, 08 Apr 2006 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/08/40004.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/40004.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/08/40004.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/40004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/40004.html</trackback:ping><description><![CDATA[        eXtremeComponents的中文的问题，目前知道的就是导出使用中文文件名的乱码问题，eXtremeComponents已经默认使用UTF来导出XLS，也已经给出了PDF导出的解决方案：<a id="_361f4fc3f080_HomePageDays_ctl00_DayList_ctl14_TitleUrl" class="postTitle2" href="../archive/2006/03/10/34717.html">最新eXtremeComponents包：支持 PDF中文导出</a><br />         网友seno指出可以参照SpringSide的解决方案，对文件名进行toUtf8编码。不过，在我自己实际应用中，我的一个应用根本不需要进行任何形式的修正就能正确地生成正确的文件名输出，如果我在eXtremeComponents添加了toUtf8导出的文件名反而乱码。所以现在的问题是我什么时候需要对文件名进行toUtf8编码？这是这段时间一直困扰我的问题，在网友冷月宫主和MagicYang的帮助，昨天经过一整天的查找测试找到了一个暂时看来令我比较满意的解决方案（暂时没有CheckIn）： 我对得到的文件名字符串使用jchardet（http://jchardet.sourceforge.net/）进行编码检测，如果检测编码是ASCII码则直接返回原字符串，否则的话是用SpringSide提供的toUtf8方法（比我原来的简洁有效）对字符串进行编码后再返回新的字符串。对应的代码如下：<br />    <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"><br /> * Copyright 2004 original author or authors.<br /> *<br /> * Licensed under the Apache License, Version 2.0 (the "License");<br /> * you may not use this file except in compliance with the License.<br /> * You may obtain a copy of the License at<br /> *<br /> *    </span><span style="color: rgb(0, 128, 0); text-decoration: underline;">http://www.apache.org/licenses/LICENSE-2.0</span><span style="color: rgb(0, 128, 0);"><br /> *<br /> * Unless required by applicable law or agreed to in writing, software<br /> * distributed under the License is distributed on an "AS IS" BASIS,<br /> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br /> * See the License for the specific language governing permissions and<br /> * limitations under the License.<br /> </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> org.extremecomponents.table.filter;<br /><br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.commons.lang.StringUtils;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.commons.logging.Log;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.commons.logging.LogFactory;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.extremecomponents.table.context.Context;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.extremecomponents.table.core.TableConstants;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.mozilla.intl.chardet.nsDetector;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.mozilla.intl.chardet.nsICharsetDetectionObserver;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.mozilla.intl.chardet.nsPSMDetector;<br /><br /></span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /> * </span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);"> Jeff Johnston<br /> </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> ExportFilterUtils {<br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> Log logger </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> LogFactory.getLog(ExportFilterUtils.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">);<br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);"> found </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">;<br /><br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> ExportFilterUtils() {<br />    }<br /><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);"> isExported(Context context) {<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> StringUtils.isNotBlank(getTableId(context));<br />    }<br /><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String getExportFileName(Context context) {<br /><br />        String tableId </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> getTableId(context);<br /><br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (StringUtils.isNotBlank(tableId)) {<br />            String exportFileNameStr </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> tableId </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">_</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> TableConstants.EXPORT_FILE_NAME;<br />            String exportFileName </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> verifyEncoding(context.getParameter(exportFileNameStr));<br /><br />            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (logger.isDebugEnabled()) {<br />                logger.debug(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">eXtremeTable export file name [</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> exportFileNameStr </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">] is [</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> exportFileName </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />            }<br /><br />            </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> exportFileName;<br />        }<br /><br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />    }<br /><br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String verifyEncoding(String exportFileName) {<br />        nsDetector det </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> nsDetector(nsPSMDetector.ALL);<br />        det.Init(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> nsICharsetDetectionObserver() {<br />            </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> Notify(String charset) {<br />                ExportFilterUtils.found </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br />            }<br />        });<br /><br />        </span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);"> done </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">;<br />        </span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);"> isAscii </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br />        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] buf </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> exportFileName.getBytes();<br />        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);"> buf.length; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br />            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (isAscii)<br />                isAscii </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> det.isAscii(buf, i);<br />            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">isAscii </span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">done)<br />                done </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> det.DoIt(buf, i, </span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">);<br />        }<br />        det.DataEnd();<br /><br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (isAscii) {<br />            </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> exportFileName;<br />        }<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> toUtf8(exportFileName);<br /><br />    }<br /><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String toUtf8(String src) {<br />        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] b </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> src.getBytes();<br />        </span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">[] c </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">[b.length];<br />        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);"> b.length; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br />            c[i] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">) (b[i] </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0x00FF</span><span style="color: rgb(0, 0, 0);">);<br />        }<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> String(c);<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * There can only be one table instance (tableId) per form. If the instance<br />     * variable exists that means there is an export being done.<br />     *<br />     * </span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);"> context<br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String getTableId(Context context) {<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> context.getParameter(TableConstants.EXPORT_TABLE_ID);<br />    }<br />}<br /></span></div>      经过我们三个人测试是成功的。欢迎大家帮助测试。大家如果有任何意见、建议可与我联系： xplucky@gmail.com<br />      压缩文件只包含： eXtremeComponents.jar eXtremeComponents.tld 和 jchardet.jar<br />       <a href="/Files/lucky/eXtremeComponents.rar">eXtremeComponents.rar   </a><br /><br /><div id="stickies-count" style="display: none;">0</div><div id="stickies-count" style="display: none;">0</div><div id="stickies-count" style="display: none;">0</div><div id="stickies-count" style="display: none;">0</div><img src ="http://www.blogjava.net/lucky/aggbug/40004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-08 17:03 <a href="http://www.blogjava.net/lucky/archive/2006/04/08/40004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eXtremeComponents FAQ(中文)</title><link>http://www.blogjava.net/lucky/archive/2006/03/31/38474.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Fri, 31 Mar 2006 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/03/31/38474.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/38474.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/03/31/38474.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/38474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/38474.html</trackback:ping><description><![CDATA[
		<div class="book" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h1 class="title">
												<a name="d0e1">
												</a>eXtremeComponents FAQ</h1>
								</div>
								<div>
										<h2 class="subtitle">eXtremeComponents FAQ（中文版） </h2>
								</div>
								<div>
										<div class="authorgroup">
												<div class="author">
														<h3 class="author">
																<span class="firstname">Jeff</span>
																<span class="surname">Johnston</span>
														</h3>
												</div>
												<div class="author">
														<h3 class="author">
																<span class="firstname">Lucky</span>
														</h3>
												</div>
												<div class="author">
														<h3 class="author">
																<span class="firstname">冷月宫主</span>
														</h3>
												</div>
										</div>
								</div>
								<div>
										<p class="releaseinfo">版本0.1.0</p>
								</div>
								<div>
										<div class="legalnotice">本文档允许在遵守以下两条原则的条件下被使用和传播： 1）不能凭借本文档索取任何费用 
2）以任何方式（印刷物或电子版）使用和传播时本文档时，必须包含本版权申明 </div>
								</div>
								<div>
										<p class="pubdate">(更新中...)</p>
								</div>
						</div>
						<hr />
				</div>
				<div class="toc">
						<p>
								<b>Table of Contents</b>
						</p>
						<dl>
								<dt>
										<a href="#d0e25">eXtremeComponents FAQ(中文)</a>
								</dt>
								<dd>
										<dl>
												<dt>1. <a href="#d0e28">如何使用导出功能</a></dt>
												<dt>2. <a href="#d0e37">传入中文参数乱码</a></dt>
												<dt>3. <a href="#d0e67">导出时中文文件名乱码</a></dt>
												<dt>4. <a href="#d0e74">导出时文件内容乱码</a></dt>
												<dt>5. <a href="#d0e89">变量命名问题</a></dt>
												<dt>6. <a href="#d0e99">格式化输出表单中的数据</a></dt>
												<dt>7. <a href="#d0e112">加入链接</a></dt>
												<dt>8. <a href="#d0e122">行高亮显示</a></dt>
										</dl>
								</dd>
						</dl>
				</div>
				<div class="article" lang="en">
						<div class="titlepage">
								<div>
										<div>
												<h2 class="title">
														<a name="d0e25">
														</a>eXtremeComponents FAQ(中文)</h2>
										</div>
								</div>
								<hr />
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h2 class="title" style="clear: both;">
																<a name="d0e28">
																</a>1. 如何使用导出功能</h2>
												</div>
										</div>
								</div>
								<p>Q: 如何使用导出功能</p>
								<p>A: 为了使用导出功能，只需要在web.xml文件中加入eXtremeComponents的导出过滤器的配置，内容如下：</p>
								<pre class="programlisting">&lt;filter&gt;<br />    &lt;filter-name&gt;eXtremeExport&lt;/filter-name&gt;<br />    &lt;filter-class&gt;org.extremecomponents.table.filter.ExportFilter&lt;/filter-class&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;responseHeadersSetBeforeDoFilter&lt;/param-name&gt;<br />      &lt;param-value&gt;true&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />  &lt;/filter&gt;<br />  &lt;filter-mapping&gt;<br />    &lt;filter-name&gt;eXtremeExport&lt;/filter-name&gt;<br />    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />  &lt;/filter-mapping&gt;<br /></pre>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h2 class="title" style="clear: both;">
																<a name="d0e37">
																</a>2. 传入中文参数乱码</h2>
												</div>
										</div>
								</div>
								<p>Q: 传入中文参数乱码，如下页面： </p>
								<pre class="programlisting">		&lt;form id="form1" name="form1" method="post" action="应用eXtremeTable的action或是结果页面名"&gt;<br />  &lt;select name="selecttype" size="6"&gt;<br />    &lt;option value="第一个"&gt;第一个&lt;/option&gt;<br />    &lt;option value="第二个"&gt;第二个&lt;/option&gt;<br />    &lt;option value="第三个"&gt;第三个&lt;/option&gt;<br />  &lt;/select&gt;<br />  &lt;input type="text" name="username" /&gt;<br />  &lt;input type="submit" name="Submit" value="提交" /&gt;<br />&lt;/form&gt;<br /></pre>
								<p>当你提交时含有eXtremeTable的结果页面会自动取得页面上的表单参数，那怕是经过了action的mapping.findForward("forward"),在我的试用过程中到页面上会出现传递过去的参数，但出现了乱码问题，使用查询（filter）功能是的中文参数问题类似。 
</p>
								<p>A: </p>
								<div class="orderedlist">
										<ol type="1">
												<li>
														<p>确认服务器的参数是否设置了正确的编码，如果使用Tomcat请确认Server.xml： </p>
														<pre class="programlisting"> &lt;Connector port="80" URIEncoding="UTF-8" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false"<br />            redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" /&gt;</pre>
												</li>
												<li>
														<p>添加编码过滤器到你的应用工程： </p>
														<pre class="programlisting">/*<br /> * Copyright 1999-2001,2004 The Apache Software Foundation.<br /> *<br /> * Licensed under the Apache License, Version 2.0 (the "License");<br /> * you may not use this file except in compliance with the License.<br /> * You may obtain a copy of the License at<br /> *<br /> *      http://www.apache.org/licenses/LICENSE-2.0<br /> *<br /> * Unless required by applicable law or agreed to in writing, software<br /> * distributed under the License is distributed on an "AS IS" BASIS,<br /> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br /> * See the License for the specific language governing permissions and<br /> * limitations under the License.<br /> */<br /><br /><br />package filters;<br /><br /><br />import java.io.IOException;<br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletException;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br />import javax.servlet.UnavailableException;<br /><br /><br />/**<br /> * &lt;p&gt;Example filter that sets the character encoding to be used in parsing the<br /> * incoming request, either unconditionally or only if the client did not<br /> * specify a character encoding.  Configuration of this filter is based on<br /> * the following initialization parameters:&lt;/p&gt;<br /> * &lt;ul&gt;<br /> * &lt;li&gt;&lt;strong&gt;encoding&lt;/strong&gt; - The character encoding to be configured<br /> *     for this request, either conditionally or unconditionally based on<br /> *     the &lt;code&gt;ignore&lt;/code&gt; initialization parameter.  This parameter<br /> *     is required, so there is no default.&lt;/li&gt;<br /> * &lt;li&gt;&lt;strong&gt;ignore&lt;/strong&gt; - If set to "true", any character encoding<br /> *     specified by the client is ignored, and the value returned by the<br /> *     &lt;code&gt;selectEncoding()&lt;/code&gt; method is set.  If set to "false,<br /> *     &lt;code&gt;selectEncoding()&lt;/code&gt; is called &lt;strong&gt;only&lt;/strong&gt; if the<br /> *     client has not already specified an encoding.  By default, this<br /> *     parameter is set to "true".&lt;/li&gt;<br /> * &lt;/ul&gt;<br /> *<br /> * &lt;p&gt;Although this filter can be used unchanged, it is also easy to<br /> * subclass it and make the &lt;code&gt;selectEncoding()&lt;/code&gt; method more<br /> * intelligent about what encoding to choose, based on characteristics of<br /> * the incoming request (such as the values of the &lt;code&gt;Accept-Language&lt;/code&gt;<br /> * and &lt;code&gt;User-Agent&lt;/code&gt; headers, or a value stashed in the current<br /> * user's session.&lt;/p&gt;<br /> *<br /> * @author Craig McClanahan<br /> * @version $Revision: 1.3 $ $Date: 2004/02/28 03:35:22 $<br /> */<br /><br />public class SetCharacterEncodingFilter implements Filter {<br /><br /><br />    // ----------------------------------------------------- Instance Variables<br /><br /><br />    /**<br />     * The default character encoding to set for requests that pass through<br />     * this filter.<br />     */<br />    protected String encoding = null;<br /><br /><br />    /**<br />     * The filter configuration object we are associated with.  If this value<br />     * is null, this filter instance is not currently configured.<br />     */<br />    protected FilterConfig filterConfig = null;<br /><br /><br />    /**<br />     * Should a character encoding specified by the client be ignored?<br />     */<br />    protected boolean ignore = true;<br /><br /><br />    // --------------------------------------------------------- Public Methods<br /><br /><br />    /**<br />     * Take this filter out of service.<br />     */<br />    public void destroy() {<br /><br />        this.encoding = null;<br />        this.filterConfig = null;<br /><br />    }<br /><br /><br />    /**<br />     * Select and set (if specified) the character encoding to be used to<br />     * interpret request parameters for this request.<br />     *<br />     * @param request The servlet request we are processing<br />     * @param result The servlet response we are creating<br />     * @param chain The filter chain we are processing<br />     *<br />     * @exception IOException if an input/output error occurs<br />     * @exception ServletException if a servlet error occurs<br />     */<br />    public void doFilter(ServletRequest request, ServletResponse response,<br />                         FilterChain chain)<br />   throws IOException, ServletException {<br /><br />        // Conditionally select and set the character encoding to be used<br />        if (ignore || (request.getCharacterEncoding() == null)) {<br />            String encoding = selectEncoding(request);<br />            if (encoding != null)<br />                request.setCharacterEncoding(encoding);<br />        }<br /><br />   // Pass control on to the next filter<br />        chain.doFilter(request, response);<br /><br />    }<br /><br /><br />    /**<br />     * Place this filter into service.<br />     *<br />     * @param filterConfig The filter configuration object<br />     */<br />    public void init(FilterConfig filterConfig) throws ServletException {<br /><br />   this.filterConfig = filterConfig;<br />        this.encoding = filterConfig.getInitParameter("encoding");<br />        String value = filterConfig.getInitParameter("ignore");<br />        if (value == null)<br />            this.ignore = true;<br />        else if (value.equalsIgnoreCase("true"))<br />            this.ignore = true;<br />        else if (value.equalsIgnoreCase("yes"))<br />            this.ignore = true;<br />        else<br />            this.ignore = false;<br /><br />    }<br /><br /><br />    // ------------------------------------------------------ Protected Methods<br /><br /><br />    /**<br />     * Select an appropriate character encoding to be used, based on the<br />     * characteristics of the current request and/or filter initialization<br />     * parameters.  If no character encoding should be set, return<br />     * &lt;code&gt;null&lt;/code&gt;.<br />     * &lt;p&gt;<br />     * The default implementation unconditionally returns the value configured<br />     * by the &lt;strong&gt;encoding&lt;/strong&gt; initialization parameter for this<br />     * filter.<br />     *<br />     * @param request The servlet request we are processing<br />     */<br />    protected String selectEncoding(ServletRequest request) {<br /><br />        return (this.encoding);<br /><br />    }<br /><br /><br />}  </pre>
												</li>
												<li>
														<p>在web.xml中添加编码过滤器配置： </p>
														<pre class="programlisting"> &lt;filter&gt;<br />    &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />    &lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;encoding&lt;/param-name&gt;<br />      &lt;param-value&gt;gb2312&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />  &lt;/filter&gt;<br />  &lt;filter-mapping&gt;<br />    &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />  &lt;/filter-mapping&gt;<br /></pre>
												</li>
										</ol>
								</div>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h2 class="title" style="clear: both;">
																<a name="d0e67">
																</a>3. 导出时中文文件名乱码</h2>
												</div>
										</div>
								</div>
								<p>Q：关于导出时中文文件名为乱码的问题</p>
								<p>A: 这是个bug，建议使用英文文件名，主要原因还是编码问题。我们现在正在想办法解决。</p>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h2 class="title" style="clear: both;">
																<a name="d0e74">
																</a>4. 导出时文件内容乱码</h2>
												</div>
										</div>
								</div>
								<p>Q：导出时文件内容乱码</p>
								<p>A:首先请确认使用的是extremecomponents-1.0.1-M5-A4版以后的版本 </p>
								<div class="orderedlist">
										<ol type="1">
												<li>Excle： 导出为Excle的中文问题已经修正，默认的情况下支持导出中文，用户不需要任何改动
</li>
												<li>PDF ： 由于extremecomponents使用了FOP来生成PDF文件，FOP在导出中文内容时会产生乱码。具体的解决方案 大家可以参考<a href="../archive/2006/03/10/34717.html" target="_top">最新eXtremeComponents包：支持 PDF中文导出</a></li>
										</ol>
								</div>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h2 class="title" style="clear: both;">
																<a name="d0e89">
																</a>5. 变量命名问题</h2>
												</div>
										</div>
								</div>
								<p>Q：当变量名为"action"，在IE下执行产生javascript错误</p>
								<p>A: 
内部使用了一些关键字，就目前我所知的为"action"、"submit"。建议大家命名时尽量避免，如果大家必须使用，则可以使用table标签的autoIncludeParameters参数设置为"false": 
</p>
								<pre class="programlisting">autoIncludeParameters="false"</pre>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h2 class="title" style="clear: both;">
																<a name="d0e99">
																</a>6. 格式化输出表单中的数据</h2>
												</div>
										</div>
								</div>
								<p>Q：怎么样格式化输出表单中的数据</p>
								<p>A: 你可以设置列的cell： </p>
								<div class="orderedlist">
										<ol type="1">
												<li>日期格式化： cell = " date " format = " yyyy-MM-dd "
</li>
												<li>数字格式化： cell="currency" format="###,###,##0.00"</li>
										</ol>
								</div>
								<p>详细信息请参考指南 </p>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h2 class="title" style="clear: both;">
																<a name="d0e112">
																</a>7. 加入链接</h2>
												</div>
										</div>
								</div>
								<p>Q：怎么样加入链接</p>
								<p>A: 你可以参考下例: </p>
								<pre class="programlisting">            &lt;ec:table<br />    var="pres"<br />    items="presidents"<br />    action="${pageContext.request.contextPath}/compact.run"<br />    imagePath="${pageContext.request.contextPath}/images/table/compact/*.gif"<br />    view="compact"<br />    title="Compact Toolbar View"<br />    showTooltips="false"<br />    &gt;<br />      &lt;ec:exportPdf<br />           fileName="output.pdf"<br />           tooltip="Export PDF"<br />           headerColor="black"<br />           headerBackgroundColor="#b6c2da"<br />           headerTitle="Presidents"<br />           text="PDF"<br />           /&gt;<br />      &lt;ec:exportXls<br />           fileName="output.xls"<br />           tooltip="Export Excel"<br />           text="XLS"<br />           /&gt;<br />        &lt;ec:row&gt;<br />            &lt;ec:column property="fullName" title="Name"&gt;<br />               &lt;a href="http://www.whitehouse.gov/history/presidents/"&gt;${pres.fullName}&lt;/a&gt;<br />            &lt;/ec:column&gt;<br />            &lt;ec:column property="nickName"/&gt;<br />            &lt;ec:column property="term"/&gt;<br />            &lt;ec:column property="born" cell="date"/&gt;<br />            &lt;ec:column property="died" cell="date"/&gt;<br />            &lt;ec:column property="career"/&gt;<br />        &lt;/ec:row&gt;<br />  &lt;/ec:table&gt;<br /></pre>
						</div>
						<div class="section" lang="en">
								<div class="titlepage">
										<div>
												<div>
														<h2 class="title" style="clear: both;">
																<a name="d0e122">
																</a>8. 行高亮显示</h2>
												</div>
										</div>
								</div>
								<p>Q: 我想使用行的高亮显示如何设置 </p>
								<p>A: 你只需要设置行标签的highlightRow属性： 
highlightRow="true"。eXtremeComponents提供了很多接口允许用户按照自己的习惯来进行定制,包括：CSS、CELL、View。相关信息请参考指南。 
</p>
						</div>
				</div>
		</div>
		<div id="stickies-count" style="display: none;">0</div>
<img src ="http://www.blogjava.net/lucky/aggbug/38474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-03-31 14:07 <a href="http://www.blogjava.net/lucky/archive/2006/03/31/38474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX enabled eXtremeTable Tutorial</title><link>http://www.blogjava.net/lucky/archive/2006/03/27/37625.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Mon, 27 Mar 2006 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/03/27/37625.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/37625.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/03/27/37625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/37625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/37625.html</trackback:ping><description><![CDATA[
		<p>
				<i>work in progress</i>
		</p>
		<p>
				<br />
Using AJAX with the eXtremeTable is a very simple and natural extension
to the existing functionality. Probably the best thing about the AJAX
integration is there is no integration at all. You are free to use
whatever AJAX toolkit you want. All you need to do is tell the
eXtremeTable what javascript to use when a table action is invoked. The
table actions meaning the filtering, sorting, paging, rows displayed
and exporting.
</p>
		<p>For my example I will be using the ultra cool <a href="http://getahead.ltd.uk/dwr/" class="external text" title="http://getahead.ltd.uk/dwr/" rel="nofollow">DWR</a>
toolkit. As will be demonstrated, the glue code required by DWR is very
minimal, which leaves us to just worry about constructing the table.
You can see the working <a href="http://extremecomponents.org/extremesite/assembler.run" class="external text" title="http://extremecomponents.org/extremesite/assembler.run" rel="nofollow">example</a> in action on the site!
</p>
		<table id="toc" class="toc">
				<tbody>
						<tr>
								<td>
										<ul style="display: none;">
												<li class="toclevel-1">
														<a href="http://extremecomponents.org/wiki/index.php/AJAX_enabled_eXtremeTable_Tutorial#Assembler_Example">
																<span class="tocnumber">1</span>
																<span class="toctext">Assembler Example</span>
														</a>
														<br />
														<br />
														<br />
												</li>
												<li class="toclevel-1">
														<a href="http://extremecomponents.org/wiki/index.php/AJAX_enabled_eXtremeTable_Tutorial#Setup_DWR">
																<span class="tocnumber">2</span>
																<span class="toctext">Setup DWR</span>
														</a>
														<br />
														<br />
														<br />
												</li>
												<li class="toclevel-1">
														<a href="http://extremecomponents.org/wiki/index.php/AJAX_enabled_eXtremeTable_Tutorial#Create_POJO">
																<span class="tocnumber">3</span>
																<span class="toctext">Create POJO</span>
														</a>
														<br />
														<br />
														<br />
												</li>
												<li class="toclevel-1">
														<a href="http://extremecomponents.org/wiki/index.php/AJAX_enabled_eXtremeTable_Tutorial#Controller">
																<span class="tocnumber">4</span>
																<span class="toctext">Controller</span>
														</a>
														<br />
														<br />
														<br />
												</li>
												<li class="toclevel-1">
														<a href="http://extremecomponents.org/wiki/index.php/AJAX_enabled_eXtremeTable_Tutorial#JSP">
																<span class="tocnumber">5</span>
																<span class="toctext">JSP</span>
														</a>
														<br />
														<br />
														<br />
												</li>
												<li class="toclevel-1">
														<a href="http://extremecomponents.org/wiki/index.php/AJAX_enabled_eXtremeTable_Tutorial#Conclusion">
																<span class="tocnumber">6</span>
																<span class="toctext">Conclusion</span>
														</a>
														<br />
														<br />
														<br />
												</li>
										</ul>
										<br />
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<script type="text/javascript"><![CDATA[if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } ]]&gt;</script>
		</p>
		<div class="editsection" style="float: right; margin-left: 5px;">[<a href="http://extremecomponents.org/wiki/index.php?title=AJAX_enabled_eXtremeTable_Tutorial&amp;action=edit&amp;section=1" title="AJAX enabled eXtremeTable Tutorial">edit</a>]</div>
		<a name="Assembler_Example">
		</a>
		<h3> Assembler Example </h3>
		<p>For this example you will need to setup the DWR toolkit, create the
POJO to build the table, and make up the JSP that contains the
eXtremeTable.
</p>
		<div class="editsection" style="float: right; margin-left: 5px;">[<a href="http://extremecomponents.org/wiki/index.php?title=AJAX_enabled_eXtremeTable_Tutorial&amp;action=edit&amp;section=2" title="AJAX enabled eXtremeTable Tutorial">edit</a>]</div>
		<a name="Setup_DWR">
		</a>
		<h3> Setup DWR </h3>
		<p>The first thing to do is <a href="http://getahead.ltd.uk/dwr/download" class="external text" title="http://getahead.ltd.uk/dwr/download" rel="nofollow">download</a> the DWR toolkit. You should read the instructions on the site, but the following is what I needed to do to get things working:
</p>
		<ul>
				<li> Place the dwr-1.1.jar into the WEB-INF/lib directory
</li>
				<li> Create a dwr.xml file and place it in the WEB-INF directory
</li>
		</ul>
		<pre>&lt;!DOCTYPE dwr PUBLIC<br />    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"<br />    "http://www.getahead.ltd.uk/dwr/dwr10.dtd"&gt;<br /><br />&lt;dwr&gt;<br />  &lt;allow&gt;<br />    &lt;create creator="new" javascript="Assembler"&gt;<br />      &lt;param name="class" value="org.extremesite.controller.Assembler"/&gt;<br />      &lt;include method="getTable"/&gt;<br />    &lt;/create&gt;<br />  &lt;/allow&gt;<br />  &lt;signatures&gt;<br />    &lt;![CDATA[<br />       import java.util.Map;<br />       import java.util.List;<br />       import org.extremesite.controller.Assembler;<br />       import javax.servlet.http.HttpServletRequest;<br />       Assembler.getTable(Map&lt;String, List&gt; parameterMap, HttpServletRequest request);<br />       ]]&gt;<br />  &lt;/signatures&gt;<br />&lt;/dwr&gt;<br /></pre>
		<p>In a nutshell the create tag allows you to reference the POJO that
builds the table, along with the method to invoke. The signature tag
declares what the actual types are for the method that is invoked. In
this example the Assembler class getTable method will be called by
passing in a Map, with the form parameters, along with the
HttpServletRequest.
</p>
		<ul>
				<li> Reference the DWR servlet in the WEB-INF/web.xml file
</li>
		</ul>
		<pre>  &lt;servlet&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;display-name&gt;DWR Servlet&lt;/display-name&gt;<br />    &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;<br />    &lt;init-param&gt;<br />       &lt;param-name&gt;debug&lt;/param-name&gt;<br />       &lt;param-value&gt;true&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />  &lt;/servlet&gt;<br />  &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />      &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br /></pre>
		<p>This is setting up the DWR servlet that is used to call your POJO.
There is nothing more you should have to know about the servlet other
than how to set it up here.
</p>
		<div class="editsection" style="float: right; margin-left: 5px;">[<a href="http://extremecomponents.org/wiki/index.php?title=AJAX_enabled_eXtremeTable_Tutorial&amp;action=edit&amp;section=3" title="AJAX enabled eXtremeTable Tutorial">edit</a>]</div>
		<a name="Create_POJO">
		</a>
		<h3> Create POJO </h3>
		<p>DWR works with POJOs. This works great for our needs because the
eXtremeTable has a full API that feels very much like building a table
with the JSP tags. In fact the JSP tags are merely a front end for the
eXtremeTable Java API. First I will show the method that builds the
table. </p>
		<pre>public class Assembler {<br />  private Object build(TableModel model, Collection presidents) throws Exception {<br />    Table table = model.getTableInstance();<br />    table.setTableId("assembler");<br />    table.setItems(presidents);<br />    table.setAction(model.getContext().getContextPath() + "/assembler.run");<br />    table.setTitle("Presidents");<br />    table.setOnInvokeAction("buildTable('assembler')");<br />    model.addTable(table);<br /><br />    Export export = model.getExportInstance();<br />    export.setView(TableConstants.VIEW_XLS);<br />    export.setViewResolver(TableConstants.VIEW_XLS);<br />    export.setImageName(TableConstants.VIEW_XLS);<br />    export.setText(TableConstants.VIEW_XLS);<br />    export.setFileName("output.xls");<br />    model.addExport(export);<br /><br />    Row row = model.getRowInstance();<br />    row.setHighlightRow(Boolean.FALSE);<br />    model.addRow(row);<br /><br />    Column columnName = model.getColumnInstance();<br />    columnName.setProperty("fullName");<br />    columnName.setIntercept((AssemblerIntercept.class).getName());<br />    model.addColumn(columnName);<br /><br />    Column columnNickName = model.getColumnInstance();<br />    columnNickName.setProperty("nickName");<br />    model.addColumn(columnNickName);<br /><br />    Column columnTerm = model.getColumnInstance();<br />    columnTerm.setProperty("term");<br />    model.addColumn(columnTerm);<br /><br />    Column columnBorn = model.getColumnInstance();<br />    columnBorn.setProperty("born");<br />    columnBorn.setCell(TableConstants.DATE);<br />    model.addColumn(columnBorn);<br /><br />    Column columnDied = model.getColumnInstance();<br />    columnDied.setProperty("died");<br />    columnDied.setCell(TableConstants.DATE);<br />    model.addColumn(columnDied);<br /><br />    Column columnCareer = model.getColumnInstance();<br />    columnCareer.setProperty("career");<br />    model.addColumn(columnCareer);<br /><br />    return model.assemble();<br />  }<br />}<br /></pre>
		<p>Most of this code should be very self explanatory. You will see how
to build a TableModel in a second, but first you will notice that it is
the only object you will have to interact with to build the table. The
first step to building a table is use the TableModel to create the
Table, Row, Column and Export. Once you create one of the model objects
it needs to be added to the model. Until you actually add it the
TableModel, the model will not use it. Once you have everything
constructed then call model.assemble(); to build the table.
</p>
		<p>Probably the most interesting call is <b>table.setOnInvokeAction("buildTable('assembler')");</b>.
This is the javascript method that will be called when you invoke any
of the table actions (paging, filtering, sorting, etc..). If the table
onInvokeAction is left blank the default javascript method is to submit
the form that wraps the eXtremeTable, just like you would expect.
</p>
		<p>The other method of the Assembler class is getTable().
</p>
		<pre>public class Assembler {<br />  public String getTable(Map parameterMap, HttpServletRequest request) {<br />    WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());<br /><br />    PresidentsDao presidentsDao = (PresidentsDao) webApplicationContext.getBean("presidentsDao");<br />    Collection presidents = presidentsDao.getPresidents();<br /><br />    Context context = null;<br />    if (parameterMap == null) {<br />      context = new HttpServletRequestContext(request);<br />    } else {<br />      context = new HttpServletRequestContext(request, parameterMap);<br />    }<br /><br />    TableModel model = new TableModelImpl(context);<br />    try {<br />      return build(model, presidents).toString();<br />    } catch (Exception e) {<br />      e.printStackTrace();<br />    }<br /><br />    return "";<br />  }<br />}<br /></pre>
		<p>This method is a little busy, but it is doing double duty. It needs
to be called the first time by the Controller (if using Spring). <i>If you use Struts this is the equivalent of the Action class.</i>
Then, when using AJAX, this method also needs to be called, but this
time passing in a custom parameterMap. The parameterMap will contain
all the parameters for the eXtremeTable using AJAX. This should become
more clear once you see the Controller and the JSP.
</p>
		<div class="editsection" style="float: right; margin-left: 5px;">[<a href="http://extremecomponents.org/wiki/index.php?title=AJAX_enabled_eXtremeTable_Tutorial&amp;action=edit&amp;section=4" title="AJAX enabled eXtremeTable Tutorial">edit</a>]</div>
		<a name="Controller">
		</a>
		<h3> Controller </h3>
		<pre>public class AssemblerController extends AbstractController {<br />  public String successView;<br /><br />  public void setSuccessView(String successView) {<br />    this.successView = successView;<br />  }<br /><br />  protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {<br />    ModelAndView mv = new ModelAndView(successView);<br />    Assembler assembler = new Assembler();<br />    Object viewData = assembler.getTable(null, request);<br />    request.setAttribute("assembler", viewData);<br />    return mv;<br />  }<br />}<br /></pre>
		<p>The controller is called the first time to initially build the
table. It calls the POJO and then passes the table to the request.
Notice how null is sent in for the parameterMap. This is because the
first time the table is built there are no table actions the table
needs to be aware of.
</p>
		<div class="editsection" style="float: right; margin-left: 5px;">[<a href="http://extremecomponents.org/wiki/index.php?title=AJAX_enabled_eXtremeTable_Tutorial&amp;action=edit&amp;section=5" title="AJAX enabled eXtremeTable Tutorial">edit</a>]</div>
		<a name="JSP">
		</a>
		<h3> JSP </h3>
		<p>Start constructing the JSP by importing the proper javascript files.
The only javascript file you need to include in your project is the
extremecomponents.js. The other declarations are used by DWR.
</p>
		<pre>  &lt;script type="text/javascript" src="&lt;c:url value="/dwr/interface/Assembler.js"/&gt;"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript" src="&lt;c:url value="/dwr/engine.js"/&gt;"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript" src="&lt;c:url value="/dwr/util.js"/&gt;"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript" src="&lt;c:url value="/js/extremecomponents.js"/&gt;"&gt;&lt;/script&gt;<br /></pre>
		<p>Then put in the hook to display the table. The div is used to call the innerHtml and stream the new markup.
</p>
		<pre>  &lt;div id="tableDiv"&gt;<br />    &lt;c:out value="${assembler}" escapeXml="false"/&gt; <br />  &lt;/div&gt;<br /></pre>
		<p>Lastly, declare the javascript to call the DWR hooks. 
</p>
		<pre>&lt;script type="text/javascript"&gt;<br />  function buildTable(form) {<br />    var parameterMap = getParameterMap(form);   <br />    Assembler.getTable(parameterMap, showTable);<br />  }<br /><br />  function showTable(table) {<br />    document.getElementById('tableDiv').innerHTML=table;<br />  }<br />&lt;/script&gt;<br /></pre>
		<p>The getParameterMap() method is included in the extremecomponents.js
file and will grab all the form parameters. You need to pass in a
reference to the form id that wraps the eXtremeTable. Remember that the
eXtremeTable is essentially a form component and the tableid is used as
the form id. By default the tableId is ec, but you usually want to set
a tableId so that code is easier to follow for people reading your
code. With the parameterMap you will then call the POJO getTable
method. The showTable is a callback that tells DWR what to call when it
returns from the getTable() method.
</p>
		<div class="editsection" style="float: right; margin-left: 5px;">[<a href="http://extremecomponents.org/wiki/index.php?title=AJAX_enabled_eXtremeTable_Tutorial&amp;action=edit&amp;section=6" title="AJAX enabled eXtremeTable Tutorial">edit</a>]</div>
		<a name="Conclusion">
		</a>
		<h3> Conclusion </h3>
		<p>This tutorial described the steps needed to get the eXtremeTable
working with AJAX. One of the main things to keep in mind is there is
no actual integration with AJAX. You simply tell the eXtremeTable what
javascript to call when one of the table actions is invoked. The other
thing to get from this example is that the DWR toolkit works with POJOs
and can be easily used with any framework.
</p>
		<div id="stickies-count" style="display: none;">0</div>
<img src ="http://www.blogjava.net/lucky/aggbug/37625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-03-27 16:12 <a href="http://www.blogjava.net/lucky/archive/2006/03/27/37625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>extremeComponents使用AJAX 指南</title><link>http://www.blogjava.net/lucky/archive/2006/03/27/37623.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDat