﻿<?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-Believe it,do it! -随笔分类-收 藏 夹</title><link>http://www.blogjava.net/tunaic/category/28373.html</link><description>Ideal is the beacon. Without ideal, there is no secure direction; without direction ,there is no life. &lt;br&gt;
理想是指路明灯。没有理想，就没有坚定的方向；没有方向，就没有生活。&lt;br&gt;
CTRL+T eclipse</description><language>zh-cn</language><lastBuildDate>Thu, 23 Sep 2010 05:40:19 GMT</lastBuildDate><pubDate>Thu, 23 Sep 2010 05:40:19 GMT</pubDate><ttl>60</ttl><item><title>WebSphere集群部署</title><link>http://www.blogjava.net/tunaic/archive/2009/08/27/292810.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Thu, 27 Aug 2009 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/tunaic/archive/2009/08/27/292810.html</guid><wfw:comment>http://www.blogjava.net/tunaic/comments/292810.html</wfw:comment><comments>http://www.blogjava.net/tunaic/archive/2009/08/27/292810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tunaic/comments/commentRss/292810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tunaic/services/trackbacks/292810.html</trackback:ping><description><![CDATA[1、https://www.ibm.com/developerworks/cn/websphere/library/techarticles/0604_xumw/<br />
2、http://www.diybl.com/course/3_program/java/javaxl/20071022/79392.html
 <img src ="http://www.blogjava.net/tunaic/aggbug/292810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tunaic/" target="_blank">三羽</a> 2009-08-27 14:25 <a href="http://www.blogjava.net/tunaic/archive/2009/08/27/292810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSO解决方案大全 Single Sign-On for everyone（转）</title><link>http://www.blogjava.net/tunaic/archive/2008/12/26/248420.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Fri, 26 Dec 2008 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/tunaic/archive/2008/12/26/248420.html</guid><wfw:comment>http://www.blogjava.net/tunaic/comments/248420.html</wfw:comment><comments>http://www.blogjava.net/tunaic/archive/2008/12/26/248420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tunaic/comments/commentRss/248420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tunaic/services/trackbacks/248420.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;java/vc单点登录的简单实现在门户项目中，经常会遇到如何实现单点登录的问题，下面就本人的经验做个总结。欢迎大家进行补充讨论。 单点登录的具体实现有很多种选择，包括：    采用专门的SSO商业软件： 主要有：Netgrity的Siteminder，已经被CA收购。Novell 公司的iChain。RSA公司的ClearTrust等。    采用门户产品供应商自己...&nbsp;&nbsp;<a href='http://www.blogjava.net/tunaic/archive/2008/12/26/248420.html'>阅读全文</a><img src ="http://www.blogjava.net/tunaic/aggbug/248420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tunaic/" target="_blank">三羽</a> 2008-12-26 13:05 <a href="http://www.blogjava.net/tunaic/archive/2008/12/26/248420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP使用URLRewirte实现url地址伪静态化</title><link>http://www.blogjava.net/tunaic/archive/2008/09/27/231532.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Sat, 27 Sep 2008 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/tunaic/archive/2008/09/27/231532.html</guid><wfw:comment>http://www.blogjava.net/tunaic/comments/231532.html</wfw:comment><comments>http://www.blogjava.net/tunaic/archive/2008/09/27/231532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tunaic/comments/commentRss/231532.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tunaic/services/trackbacks/231532.html</trackback:ping><description><![CDATA[<p>URLRewirte的用处: <br />
1.满足搜索引擎的要求 <br />
2.隐藏技术实现，提高网站的移植性 <br />
3.满足美感的要求(个人感觉这个用处太牵强) <br />
<br />
项目部署 <br />
1.首先在http://tuckey.org/urlrewirte/下载urlrewirtefilter <br />
2.解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下,然后编译 <br />
3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下 <br />
4.在web.xml文件中加入以下: <br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">&nbsp;1</span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;动态地址静态化&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UrlRewriteFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">logLevel</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">WARN</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UrlRewriteFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<br />
5.需要配置urlrewrite.xml文件来实现url静态化,下面将详细说明 <br />
<br />
到这里相关的配置已经完成,下面看如何把动态地址静态化 <br />
1.普通url静态化 <br />
例如:要把http://localhost/prjtest/user/list.jsp转换成http://localhost/prjtest/user/list.html <br />
这种是最简单的,当一个servlet跳转到list.jsp页面列出user列表时,在urlrewrite.xml中这样配置: <br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">1</span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">rule</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">from</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">^/user/list.html</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">from</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">to <code>type="redirect"</code></span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/user/list.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">to</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">rule</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span></div>
当请求/user/list.html这个页面时,实际上相当于请求/user/list.jsp页面 <br />
在servlet的跳转要这样写: <br />
response.sendRedirect("./user/list.html"); <br />
2.带参数的url静态化 <br />
例如:要把http://localhost/prjtest/user/view.jsp?cid=1&amp;cname=admin转换成 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://localhost/prjtest/user/view/1_admin.html <br />
在urlrewrite.xml中这样配置: <br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">1</span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">rule</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">from</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">^/user/view/([0-9]+)_([a-z]+).html$</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">from</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">to <code>type="redirect"</code></span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/user/view.jsp?cid=$1</span><span style="color: #ff0000">&amp;cname</span><span style="color: #000000">=$2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">to</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">rule</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span></div>
<br />
当请求/user/view/1_admin.html这个页面时,实际上相当于请求/user/list.jsp?cid=1&amp;cname=admin页面 <br />
在servlet的跳转要这样写(cid,cname为变量): <br />
response.sendRedirect("./user/view/"+ cid +"_"+ cname +".html"); <br />
注意:配置文件中用"&amp;"来代替"&amp;" <br />
一个通用的正则表达式:[a-zA-Z0-9]+ <br />
<br />
特别说明<br />
<font face="Courier New">为什么地址栏不变？<br />
</font><font color="#3366ff">原因就在于浏览器显示的是最后被给定的URL。当一个URL被提交后，在某一个组件返回一个相应给浏览器之前，你的应用可能转发请求多次。所有这些都发生在服务器端，浏览器并不知道发生了什么事。当一个Http相应被放回时，它并没有包含地址信息，所以浏览器仅仅显示用来作为初始请求的地址。<br />
<br />
要想让地址栏也变成静态化的URL，很简单，将&lt;to type="redirect"&gt;改成&lt;to type="forward"&gt;即可</font>
<img src ="http://www.blogjava.net/tunaic/aggbug/231532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tunaic/" target="_blank">三羽</a> 2008-09-27 16:20 <a href="http://www.blogjava.net/tunaic/archive/2008/09/27/231532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的一些收藏</title><link>http://www.blogjava.net/tunaic/archive/2008/09/27/231519.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Sat, 27 Sep 2008 07:45:00 GMT</pubDate><guid>http://www.blogjava.net/tunaic/archive/2008/09/27/231519.html</guid><wfw:comment>http://www.blogjava.net/tunaic/comments/231519.html</wfw:comment><comments>http://www.blogjava.net/tunaic/archive/2008/09/27/231519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tunaic/comments/commentRss/231519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tunaic/services/trackbacks/231519.html</trackback:ping><description><![CDATA[<a href="/Files/tunaic/Struts2.rar">/Files/tunaic/Struts2.rar</a>
<img src ="http://www.blogjava.net/tunaic/aggbug/231519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tunaic/" target="_blank">三羽</a> 2008-09-27 15:45 <a href="http://www.blogjava.net/tunaic/archive/2008/09/27/231519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tapestry 各种组件使用</title><link>http://www.blogjava.net/tunaic/archive/2008/09/27/231513.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Sat, 27 Sep 2008 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/tunaic/archive/2008/09/27/231513.html</guid><wfw:comment>http://www.blogjava.net/tunaic/comments/231513.html</wfw:comment><comments>http://www.blogjava.net/tunaic/archive/2008/09/27/231513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tunaic/comments/commentRss/231513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tunaic/services/trackbacks/231513.html</trackback:ping><description><![CDATA[说明：只是说明一些需要注意的东西，更多的学习参考Tapestry官方文档<br />
1、For<br />
source:是对应的java类里的List 对象或者是个数组 需要抽象 或者提供set get方法<br />
value:是循环这个source对象代表当前的一个 ，需要在page文件中设置问一个属性，可以不在对应的java类里有这个属性<br />
index:是循环的索引值 同value一样 在page文件中设置一个属性即可 &lt;property name="index"/&gt;<br />
在循环的时候 会自动为vlaue和index赋当前的值
<p>2、Foreach 和For一样使用</p>
<p>3、Hidden组件 总是多余S的处理<br />
&nbsp;&lt;input jwcid="@Hidden" type="hidden" value="ognl:blahblah" encode="false"/&gt;</p>
<p><br />
4、 Insert 组件 <br />
e.g. <br />
&nbsp;&nbsp;&nbsp; &lt;input type="text" jwcid="name@Insert" value="ognl:user.name"/&gt; <br />
&nbsp;&nbsp;&nbsp; 页面表现时,将会到页面类中寻找getUser().getName()方法获取初值并输出 <br />
&nbsp;&nbsp;&nbsp; 相当于在页面上显示数据.</p>
<p>5、 TextField 组件 <br />
e.g. <br />
&nbsp;&nbsp;&nbsp; &lt;input type="text" jwcid="username@TextField" value="ognl:username"/&gt; <br />
&nbsp;&nbsp;&nbsp; 页面表现时,将会到页面类中寻找getUsername()方法获取初值 <br />
&nbsp;&nbsp;&nbsp; *如果是修改信息页面,通常初始值要在页面表现之前由setUsername()手动设置从数据库中读取出来的值 <br />
&nbsp;&nbsp;&nbsp; 表单提交时,通过setUsername()写入新值(即用户输入值),在类中通过getUsername()获取新值 <br />
&nbsp;&nbsp;&nbsp; 相当于在修改个人信息时,首先读出用户名赋予文本框(用户名)初值,用户修改时填入新值,后台获取之 <br />
&nbsp;&nbsp;&nbsp; *Hidden属性区分是普通文本输入框(默认false)和密码输入框(hidden="ognl:true") <br />
&nbsp;&nbsp;&nbsp; readonly属性设置只读 readonly="true"为只读(后台可读取) <br />
&nbsp;&nbsp;&nbsp; *disabled属性设置是否可写 diabled="true"为不可写(后台也不可读取)</p>
<p>6、 TextArea 组件 <br />
e.g. <br />
&nbsp;&nbsp;&nbsp; &lt;textarea jwcid="content@TextArea" value="ognl:content" cols="40" rows="10"&gt;&lt;/textarea&gt; <br />
&nbsp;&nbsp;&nbsp; 页面表现时,将会到页面类中寻找getContent()方法获取初值 <br />
&nbsp;&nbsp;&nbsp; 工作原理同TextField</p>
<p>7、 RadioGroup/Radio 组件 <br />
e.g. <br />
&nbsp;&nbsp;&nbsp; &lt;span jwcid="headImage@RadioGroup" selected="ognl:headImage"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input jwcid="@Radio" type="radio" value="1"/&gt;头像1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input jwcid="@Radio" type="radio" value="2"/&gt;头像2 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input jwcid="@Radio" type="radio" value="3"/&gt;头像3 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input jwcid="@Radio" type="radio" value="4"/&gt;头像4 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input jwcid="@Radio" type="radio" value="5"/&gt;头像5 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input jwcid="@Radio" type="radio" value="6"/&gt;头像6 <br />
&nbsp;&nbsp;&nbsp; &lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp; RadioGroup为每一个Radio提供一个唯一的ID。RadioGroup跟踪当前被选中的属性值，并且只有一个Radio能够被选中. <br />
&nbsp;&nbsp;&nbsp; 页面提交时，RadioGroup组件就利用OGNL表达式向headImage字段写入被选中的Radio组件的value参数值. <br />
&nbsp;&nbsp;&nbsp; 页面表现时(修改页面),将会到页面类中寻找getHeadImage()方法获取初值,然后寻找@Radio组件中与其相同的组件并勾选上.</p>
<p>8、 PropertySelection 组件 <br />
&nbsp;&nbsp;&nbsp; 使用PropertySelection组件必须要构造一个类来实现IPropertySelectionModel接口，并且重写该接口的5个方法. <br />
&nbsp;&nbsp;&nbsp; public int getOptionCount() //提供下拉菜单的长度 <br />
&nbsp;&nbsp;&nbsp; public Object getOption(int index) //提供select标签的option <br />
&nbsp;&nbsp;&nbsp; public String getLabel(int index) //提供select标签的Label值，也就是下拉菜单显示的内容 <br />
&nbsp;&nbsp;&nbsp; public String getValue(int index) //提供select标签的value值 <br />
&nbsp;&nbsp;&nbsp; public Object translateValue(String value) //selected后的返回值，value值未必就是我们需要的返回值，可以在这个方法里面对返回的value做对应的转换或修改. <br />
e.g.1. 性别下拉框 <br />
&nbsp;&nbsp;&nbsp; &lt;select jwcid="gender@ProPertySelection" name="genderSelect" value="ognl:gender" model="supportedGender"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option selected&gt;先生&lt;/option&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option&gt;女士&lt;/option&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/select&gt; </p>
<p><br />
代码<br />
GenderSelectionModel.java&nbsp;&nbsp; <br />
public class GenderSelectionModel implements IPropertySelectionModel {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static final String male = "先生";&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static final String female = "女士";&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static final String[] genderOptions = { male, female };&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public int getOptionCount() {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return genderOptions.length;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public Object getOption(int index) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.translateValue(genderOptions[index]);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public String getLabel(int index) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return genderOptions[index].toString();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public String getValue(int index) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return genderOptions[index];&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public Object translateValue(String value) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (value.equals("先生")) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "1";&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "0";&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
}&nbsp; </p>
<p>&nbsp;</p>
<p>代码<br />
ModUserInfo.java&nbsp;&nbsp; <br />
public IPropertySelectionModel getSupportedGender() {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return new GenderSelectionModel();&nbsp;&nbsp; <br />
}&nbsp; </p>
<p><br />
&nbsp;&nbsp;&nbsp; 存入数据库中"1"代表先生,"0"代表女士,通过translateValue(String value)方法转换 <br />
&nbsp;&nbsp;&nbsp; 页面表现时,通过model属性给出的IPropertySelectionModel获取下拉选项,即getSupportedGender(). <br />
&nbsp;&nbsp;&nbsp; 然后通过getGender()方法获取初值,比如获取"0",则在页面显示时寻找value值为"0"的选项即为"女士",并选择之作为初始选择项.</p>
<p>e.g.2. 日志类型下拉框 <br />
&nbsp;&nbsp;&nbsp; &lt;select jwcid="logType@PropertySelection" name="typeSelect" value="ognl:logType" model="supportedType"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option&gt;心情日记&lt;/option&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option&gt;情感天地&lt;/option&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option&gt;生活感触&lt;/option&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/select&gt; </p>
<p><br />
代码<br />
TypeSelectionModel.java&nbsp;&nbsp; <br />
public class TypeSelectionModel implements IPropertySelectionModel {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; private List typeList = new ArrayList();&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public TypeSelectionModel(List typeList) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.typeList = typeList;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public int getOptionCount() {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return typeList.size();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public Object getOption(int index) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ((LogType)typeList.get(index)).getValue();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public String getLabel(int index) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ((LogType) typeList.get(index)).getName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public String getValue(int index) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ((LogType) typeList.get(index)).getValue();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public Object translateValue(String value) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return value;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
}&nbsp; </p>
<p>&nbsp;</p>
<p>代码<br />
ModLog.java&nbsp;&nbsp; <br />
public IPropertySelectionModel getSupportedType() {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; TypeSelectionModel typeSelectionModel =&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new TypeSelectionModel(loadType(getUser().getUserId()));&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return typeSelectionModel;&nbsp;&nbsp; <br />
}&nbsp;&nbsp; <br />
&nbsp; <br />
private List loadType(int userid) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; ...//从数据库载入该用户的日志类型列表&nbsp;&nbsp; <br />
}&nbsp; </p>
<p><br />
&nbsp;&nbsp;&nbsp; 页面表现时,通过model属性给出的IPropertySelectionModel获取下拉选项,即getSupportedType(). <br />
&nbsp;&nbsp;&nbsp; 然后通过value属性给出的初始值即,getLogType()方法获取初值,比如获取"2",则在页面显示时寻找value值为"2"的选项即为"生活感触",并选择之作为初始选择项.</p>
<p>9、 Form组件 <br />
e.g. <br />
&nbsp;&nbsp;&nbsp; &lt;form jwcid="logForm@Form"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... <br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt; <br />
&nbsp;&nbsp;&nbsp; Form的监听(listener)方法可以有两种方式: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 在Form组件中声明. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form jwcid="logForm@Form" listener="ognl:listener:onLogin"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 在submit类型组件中声明. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="submit" jwcid="onLogin@Submit" listener="listener:onLogin" value="发表"/&gt;或者 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;span jwcid="@ImageSubmit" image="..." listener="listener:onLogin"&gt;&lt;img src="..." width="" height=""/&gt;&lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前一种方式当Form中只要有submit就会触发监听方法,后一种方式是Form中有多个submit,各自实现不同的监听方法.</p>
<p>G) Foreach 组件 <br />
e.g. <br />
&nbsp;&nbsp;&nbsp; &lt;span jwcid="@Foreach" source="ognl:logList" value="ognl:item"&gt; <br />
&nbsp;&nbsp;&nbsp; 循环组件,遍历source参数,在表现其内容前更新value参数,将Foreach组件所包含的内容重复表现,其中可以通过value参数获取所需显示内容. <br />
&nbsp;&nbsp;&nbsp; 本例中,页面表现时通过getLogList()方法获取日志列表,循环取出其中数据更新item(日志对象)并予以显示.其中item需要在页面规范(.page)文件中声明: <br />
&nbsp;&nbsp;&nbsp; &lt;property name="item"/&gt; <br />
&nbsp;&nbsp;&nbsp; *class参数用来寻找类似CSS的文件对Foreach进行修饰. <br />
&nbsp;&nbsp;&nbsp; Foreach组件: class="ognl:beans.evenOdd.next" <br />
&nbsp;&nbsp;&nbsp; Page文件: &lt;bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/&gt; <br />
&nbsp;&nbsp;&nbsp; CSS文件: tr.odd{background-color: #ffffff;}tr.even{background-color: #eeeeee;}</p>
<p>10、 Conditional 组件 <br />
e.g. <br />
&nbsp;&nbsp;&nbsp; &lt;span jwcid="@Conditional" condition='ognl:item.sex.equals("1")'&gt;先生&lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;span jwcid="@Conditional" condition='ognl:item.sex.equals("0")'&gt;女士&lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp; conditional参数为true时运行Conditional组件中的HTML模板内容. <br />
&nbsp;&nbsp;&nbsp; 在Tapestry4.0以后就不支持该组件了, 可以使用其他组件来实现: <br />
&nbsp;&nbsp;&nbsp; 1. Contrib:Choose和Contrib:When <br />
&nbsp;&nbsp;&nbsp; &lt;library id="contrib" specification-path="classpath:/org/apache/tapestry/contrib/Contrib.library"/&gt;(.application文件中引入Contrib类包) <br />
&nbsp;&nbsp;&nbsp; &lt;span jwcid="@contrib:Choose"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;span jwcid="@contrib:When" condition='ognl:user.gender.equals("1")'&gt;先生&lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;span jwcid="@contrib:When" condition='ognl:user.gender.equals("0")'&gt;女士&lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp; 2. If组件 <br />
&nbsp;&nbsp;&nbsp; &lt;span jwcid="@If" condition='ognl:item.sex.equals("1")'&gt;先生&lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;span jwcid="@If" condition='ognl:item.sex.equals("0")'&gt;女士&lt;/span&gt; <br />
&nbsp;&nbsp;&nbsp; 3. Else组件<br />
&nbsp;&nbsp;&nbsp; &lt;span jwcid="@Else"&gt;man&lt;/span&gt; </p>
<p>【============================ts的函数执行顺序========================================】<br />
对之前的该文章进行了一些修正，主要是针对finishLoad()方法。 <br />
我觉得对初学者会有一些帮助。 <br />
下面这几个函数是我在使用的，它们的执行顺序依次从上到下。 <br />
1.protected void finishLoad() {} *** <br />
2.public void pageValidate(PageEvent event) {} <br />
3.public void activateExternalPage(Object[] parameters, IRequestCycle cycle) {} <br />
4.public void pageBeginRender(PageEvent event) {} <br />
// 如果有表单提交，则将form中的各字段的值赋给页面类 <br />
5. ...... 赋值 <br />
6.public void submit() // 表单提交等用listenter:调用的方法 <br />
7.protected void prepareForRender(IRequestCycle cycle) {} <br />
---------------------------------------------------- <br />
1.protected void finishLoad() {} <br />
这个函数最先执行，但是它实际上没有什么用处（我感觉）。因为： <br />
　　这个函数只在页面池中没有某一个页面类、需要生成一个新的页面对象时才调用。这里就有一个陷阱：如果你的tomcat启动时使用了-Dorg.apache.tapestry.disable-caching=true(为了调试方便而设)，那么你每次刷新页面时，它都会执行（因为每个request都会新生成一个页面类对象），造成了它总是执行的假象。在实际的部署时，会使用caching，则这个函数执行的机会很少。所以要注意。 <br />
　　初始化的代码放在4 pageBeginRender()中 <br />
2.public void pageValidate(PageEvent event) {} <br />
如果实现了PageValidateListener接口，则可以在这里进行验证，比如访问权限等。执行完1后，它就开始执行。 <br />
3.public void activateExternalPage(Object[] parameters, IRequestCycle cycle) {} <br />
如果实现了IExternalPage接口，则可以从这里取得由外面传过来的参数。执行2后，执行到这里。在这里可以把那些参数取出，赋给页面类。 <br />
4.public void pageBeginRender(PageEvent event) {} <br />
执行完3后，将执行本函数。但是这时从客户端传过来的参数还没有被赋值(如果提交了表单的话)。这里可以进行一些初始化操作。 <br />
5.执行完4后，如果有表单提交，在这里将会取出那些值，赋给对应的字段。(注意：只是将表单中有的值赋过来) <br />
6.public void submit() <br />
如果有表单提交的话，在这里将进行对应的操作。因为此时各字段已经取好值了，所以可以拿来直接用。 <br />
7.protected void prepareForRender(IRequestCycle cycle) {} <br />
最后才执行这个方法。我们可以在其中进行为了在页面上显示数据而进行的操作，比如取得什么对象什么的，因为这里页面类的属性赋值已经结束，可以直接拿来使用了。 <br />
注意：如果执行了6，则还要执行4，再执行7。如果没有6，4完了就直接是7。 <br />
以上是我所总结的执行顺序，不当之处请指出。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>----------------------------------------------------- <br />
最开始学tapestry的时候，觉得&#8220;怎么有这么多地方需要持久啊&#8221;。原来以前只知道pageBeginRender这个函数，什么初始化操作都放在它里面。可是它是在赋值之前执行，所以拿到的字段多都是空的，却都以为是没有持久化的缘故。所以在客户端里放了一大堆的@Hidden，或者session中持久，非常麻烦，，，对tapestry也产生的怀疑。现在才知道那些需要取得客户端传来的参数的代码，最好放在prepareForRender里，很多不必要的持久都可以省掉了</p>
<img src ="http://www.blogjava.net/tunaic/aggbug/231513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tunaic/" target="_blank">三羽</a> 2008-09-27 15:29 <a href="http://www.blogjava.net/tunaic/archive/2008/09/27/231513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml文件操作（利用dom4j)</title><link>http://www.blogjava.net/tunaic/archive/2008/09/27/231509.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Sat, 27 Sep 2008 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/tunaic/archive/2008/09/27/231509.html</guid><wfw:comment>http://www.blogjava.net/tunaic/comments/231509.html</wfw:comment><comments>http://www.blogjava.net/tunaic/archive/2008/09/27/231509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tunaic/comments/commentRss/231509.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tunaic/services/trackbacks/231509.html</trackback:ping><description><![CDATA[<h5>代码:</h5>
<code id="code0">package dom_xml;<br />
<br />
import org.dom4j.Document;<br />
import org.dom4j.Element;<br />
import org.dom4j.Attribute;<br />
import java.util.List;<br />
import java.util.Iterator;<br />
<br />
import org.dom4j.io.OutputFormat;<br />
import org.dom4j.io.XMLWriter;<br />
import java.io.*;<br />
import org.dom4j.DocumentException;<br />
import org.dom4j.io.SAXReader; <br />
import org.dom4j.DocumentHelper;<br />
<br />
public class XmlDom4J {<br />
<br />
/**<br />
&nbsp; * 生成xml文件；<br />
&nbsp; *<br />
&nbsp; */<br />
public void createXMLFile(){<br />
&nbsp; //使用 DocumentHelper 类创建一个文档实例。 DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。<br />
&nbsp; Document document=DocumentHelper.createDocument();<br />
&nbsp; <br />
&nbsp; //使用 addElement() 方法创建根元素 catalog 。addElement() 用于向 XML 文档中增加元素。<br />
&nbsp; Element catalogElement = document.addElement("catalog");<br />
&nbsp; //在 catalog 元素中使用 addComment() 方法添加注释&#8220;An XML catalog&#8221;。<br />
&nbsp; catalogElement.addComment("An XML Catalog");<br />
&nbsp; //在 catalog 元素中使用 addProcessingInstruction() 方法增加一个处理指令。<br />
&nbsp; catalogElement.addProcessingInstruction("target","text");<br />
&nbsp; <br />
&nbsp; //在 catalog 元素中使用 addElement() 方法增加 journal 元素。<br />
&nbsp; Element journal=catalogElement.addElement("journal");<br />
&nbsp; //使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。<br />
&nbsp; journal.addAttribute("title", "XML Zone");<br />
&nbsp; journal.addAttribute("publisher", "IBM Devoloperment");<br />
&nbsp; <br />
&nbsp; //添加节点journal的子节点article,并设置其属性；<br />
&nbsp; Element articleElement=journal.addElement("article");<br />
&nbsp; articleElement.addAttribute("level", "Intermediate");<br />
&nbsp; articleElement.addAttribute("date", "December-2008");<br />
&nbsp; <br />
&nbsp; //添加节点articleElement的子结点title,并使用 setText() 方法设置其元素的文本。<br />
&nbsp; Element titleElement=articleElement.addElement("title");<br />
&nbsp; titleElement.setText("又是下雨天");<br />
&nbsp; <br />
&nbsp; //添加节点articleElement的子结点author.添加子结点的子结点firstname、lastname,并设置其文件；<br />
&nbsp; Element authorElement=articleElement.addElement("author");<br />
&nbsp; &nbsp;&nbsp; Element&nbsp; firstNameElement=authorElement.addElement("firstname");<br />
&nbsp; &nbsp;&nbsp; firstNameElement.setText("Marcello");<br />
&nbsp; &nbsp;&nbsp; Element lastNameElement=authorElement.addElement("lastname");<br />
&nbsp; &nbsp;&nbsp; lastNameElement.setText("Vitaletti");<br />
&nbsp; &nbsp;&nbsp; <br />
&nbsp; &nbsp;&nbsp; //可以使用 addDocType()&nbsp; 方法添加文档类型说明。<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp;&nbsp; <br />
&nbsp; &nbsp;&nbsp; XMLWriter output;<br />
&nbsp; try {<br />
&nbsp; &nbsp;OutputFormat format=new OutputFormat();<br />
&nbsp; &nbsp;format.setEncoding("gb2312");<br />
&nbsp; &nbsp;output = new XMLWriter(<br />
&nbsp; &nbsp;&nbsp; new FileWriter(new File("catalog.xml")),format);<br />
&nbsp; &nbsp;output.write(document);<br />
&nbsp; &nbsp;output.close();<br />
&nbsp; } catch (IOException e) {<br />
&nbsp; &nbsp;e.printStackTrace();<br />
&nbsp; }&nbsp; <br />
}<br />
<br />
/**<br />
&nbsp; * 修改xml文件指定节点的属性；<br />
&nbsp; * @param inputXml xml文件流<br />
&nbsp; * @oldAttributeValue 原属性；<br />
&nbsp; * @attributeValue 要修改成的值；<br />
&nbsp; * @param XPath 要修改节点属性的表达式；如："//article/@level" 则表示修改节点level(父节点为article)的属性<br />
&nbsp; * 特别说明:@后面表示的是属性;<br />
&nbsp; */<br />
public Document modifyXMLNodeAttributeByName(File inputXml, String XPath,String oldAttributeValue,String attributeValue) {<br />
&nbsp; if(XPath.indexOf("@")&lt;0){<br />
&nbsp; &nbsp;System.out.println("参数XPath无效,请在要修改的属性前加入'@'");<br />
&nbsp; &nbsp;return null;<br />
&nbsp; }<br />
&nbsp; SAXReader saxReader = new SAXReader();<br />
&nbsp; Document document=null;<br />
&nbsp; try {<br />
&nbsp; &nbsp;document = saxReader.read(inputXml);<br />
&nbsp; &nbsp;List list = document.selectNodes(XPath);<br />
&nbsp; &nbsp;Iterator iter = list.iterator();<br />
&nbsp; &nbsp;while (iter.hasNext()) {<br />
&nbsp; &nbsp; Attribute attribute = (Attribute) iter.next();<br />
&nbsp; &nbsp; if (attribute.getValue().equals(oldAttributeValue))//把原属性修改为新的属性；<br />
&nbsp; &nbsp;&nbsp; attribute.setValue(attributeValue);<br />
&nbsp; &nbsp;}<br />
&nbsp; &nbsp;<br />
&nbsp; } catch (DocumentException e) {&nbsp; &nbsp;<br />
&nbsp; &nbsp;e.printStackTrace();<br />
&nbsp; }<br />
&nbsp; return document;<br />
&nbsp; <br />
}<br />
<br />
/**<br />
&nbsp; * 修改指定节点的属性值；<br />
&nbsp; * @param inputXml xml文件流<br />
&nbsp; * @param XPath 要修改节点属性的表达式；如："//article/@level" 则表示修改节点level(父节点为article)的属性<br />
&nbsp; * @param attributeValue 属性新值；<br />
&nbsp; */<br />
public Document modifyXMLNodeAttributeByName(File inputXml, String XPath,String attributeValue) {<br />
&nbsp; if(XPath.indexOf("@")&lt;0){<br />
&nbsp; &nbsp;System.out.println("参数XPath无效,请在要修改的属性前加入'@'");<br />
&nbsp; &nbsp;return null;<br />
&nbsp; }<br />
&nbsp; SAXReader saxReader = new SAXReader();&nbsp; <br />
&nbsp; Document document=null;<br />
&nbsp; try {<br />
&nbsp; &nbsp;document = saxReader.read(inputXml);&nbsp; <br />
&nbsp; &nbsp;List list = document.selectNodes(XPath);&nbsp; &nbsp;<br />
&nbsp; &nbsp;Iterator iter = list.iterator();<br />
&nbsp; &nbsp;while (iter.hasNext()) {<br />
&nbsp; &nbsp; Attribute attribute = (Attribute) iter.next();&nbsp; &nbsp; <br />
&nbsp; &nbsp; //把原属性修改为新的属性；<br />
&nbsp; &nbsp; attribute.setValue(attributeValue);<br />
&nbsp; &nbsp;}<br />
&nbsp; &nbsp;<br />
&nbsp; } catch (DocumentException e) {&nbsp; &nbsp;<br />
&nbsp; &nbsp;e.printStackTrace();<br />
&nbsp; }<br />
&nbsp; return document;<br />
}<br />
<br />
/**<br />
&nbsp; * 获取某一节点的属性值；<br />
&nbsp; * @param inputxml xml文件；<br />
&nbsp; * @param XPath<br />
&nbsp; * @return<br />
&nbsp; */<br />
public String[] getNodeAttributeValue(File inputxml,String XPath){<br />
&nbsp; String nodeAttri="";//储存节点属性值;<br />
&nbsp; if(XPath.indexOf("@")&lt;0){<br />
&nbsp; &nbsp;return null;<br />
&nbsp; }<br />
&nbsp; SAXReader saxReader=new SAXReader();<br />
&nbsp; Document document=null;<br />
&nbsp; try{<br />
&nbsp; &nbsp;document=saxReader.read(inputxml);<br />
&nbsp; &nbsp;List list=document.selectNodes(XPath);<br />
&nbsp; &nbsp;Iterator it=list.iterator();<br />
&nbsp; &nbsp;while(it.hasNext()){<br />
&nbsp; &nbsp; Attribute attri=(Attribute)it.next();<br />
&nbsp; &nbsp; nodeAttri+=attri.getValue()+",";<br />
&nbsp; &nbsp;}<br />
&nbsp; }catch(Exception e){<br />
&nbsp; &nbsp;e.printStackTrace();<br />
&nbsp; }<br />
&nbsp; if(nodeAttri.length()&gt;0){<br />
&nbsp; &nbsp;nodeAttri=nodeAttri.substring(0, nodeAttri.length()-1);<br />
&nbsp; }<br />
&nbsp; return nodeAttri.split(",");<br />
}<br />
<br />
/**<br />
&nbsp; * 修改指定节点的文本值；<br />
&nbsp; * @param inputXml<br />
&nbsp; * @param XPath 要修改节点属性的表达式；如："//article/@level" 则表示article节点下的所有level节点的文本；<br />
&nbsp; * @param newText 新的文本值；<br />
&nbsp; */<br />
public Document modifyXMLNodeTextByName(File inputXml,String XPath,String newText){<br />
&nbsp; if(XPath.indexOf("@")&gt;=0){<br />
&nbsp; &nbsp;System.out.println("参数XPath无效!");<br />
&nbsp; &nbsp;return null;<br />
&nbsp; }<br />
&nbsp; SAXReader saxReader = new SAXReader();<br />
&nbsp; Document document=null;<br />
&nbsp; try {<br />
&nbsp; &nbsp;document=saxReader.read(inputXml);<br />
&nbsp; &nbsp;List list= document.selectNodes(XPath);<br />
&nbsp; &nbsp;Iterator iter = list.iterator();<br />
&nbsp; &nbsp;while(iter.hasNext()){&nbsp; &nbsp; <br />
&nbsp; &nbsp; Element elementText=(Element)iter.next();&nbsp; &nbsp; <br />
&nbsp; &nbsp; elementText.setText(newText);&nbsp; &nbsp; <br />
&nbsp; &nbsp;}<br />
&nbsp; } catch (DocumentException e) {&nbsp; &nbsp;<br />
&nbsp; &nbsp;e.printStackTrace();<br />
&nbsp; }<br />
&nbsp; return document;<br />
}<br />
<br />
/**<br />
&nbsp; *&nbsp; 替换指定节点文本的值。<br />
&nbsp; * @param inputXml xml文件流<br />
&nbsp; * @param XPath 要修改节点属性的表达式；如："//article/level" 则表示article节点下的所有level节点的文本；<br />
&nbsp; * @param oldText 原文本<br />
&nbsp; * @param newText 新文本；<br />
&nbsp; */<br />
public Document modifyXMLNodeTextByName(File inputXml,String XPath,String oldText,String newText){<br />
&nbsp; if(XPath.indexOf("@")&gt;=0){<br />
&nbsp; &nbsp;System.out.println("参数XPath无效!");<br />
&nbsp; &nbsp;return null;<br />
&nbsp; }<br />
&nbsp; SAXReader saxReader = new SAXReader();<br />
&nbsp; Document document=null;<br />
&nbsp; try {<br />
&nbsp; &nbsp;document=saxReader.read(inputXml);<br />
&nbsp; &nbsp;List list= document.selectNodes(XPath);<br />
&nbsp; &nbsp;Iterator iter = list.iterator();<br />
&nbsp; &nbsp;while(iter.hasNext()){<br />
&nbsp; &nbsp; Element elementText=(Element)iter.next();<br />
&nbsp; &nbsp; if(elementText.getText().equals(oldText))<br />
&nbsp; &nbsp; elementText.setText(newText);<br />
&nbsp; &nbsp;}<br />
&nbsp; } catch (DocumentException e) {&nbsp; &nbsp;<br />
&nbsp; &nbsp;e.printStackTrace();<br />
&nbsp; }<br />
&nbsp; return document;<br />
}<br />
/**<br />
&nbsp; * 获取某一节点的文本内容；<br />
&nbsp; * @param inputxml xml文件；<br />
&nbsp; * @param XPath<br />
&nbsp; * @return<br />
&nbsp; */<br />
public String[] getNodeTextValue(File inputxml,String XPath){<br />
&nbsp; String nodeTextValue="";//储存节点属性值;<br />
&nbsp; if(XPath.indexOf("@")&gt;=0){<br />
&nbsp; &nbsp;return null;<br />
&nbsp; }<br />
&nbsp; SAXReader saxReader=new SAXReader();<br />
&nbsp; Document document=null;<br />
&nbsp; try{<br />
&nbsp; &nbsp;document=saxReader.read(inputxml);<br />
&nbsp; &nbsp;List list=document.selectNodes(XPath);<br />
&nbsp; &nbsp;Iterator it=list.iterator();<br />
&nbsp; &nbsp;while(it.hasNext()){<br />
&nbsp; &nbsp; Element text=(Element)it.next();<br />
&nbsp; &nbsp; nodeTextValue+=text.getText()+",";<br />
&nbsp; &nbsp;}<br />
&nbsp; }catch(Exception e){<br />
&nbsp; &nbsp;e.printStackTrace();<br />
&nbsp; }<br />
&nbsp; if(nodeTextValue.length()&gt;0){<br />
&nbsp; &nbsp;nodeTextValue=nodeTextValue.substring(0, nodeTextValue.length()-1);<br />
&nbsp; }<br />
&nbsp; return nodeTextValue.split(",");<br />
}<br />
<br />
<br />
<br />
/**<br />
&nbsp; * 保存xml文件;<br />
&nbsp; * @param document xml文件流;<br />
&nbsp; * @param filePath 文件存储的全路径(包括文件名)<br />
&nbsp; * @code 储存的编码;<br />
&nbsp; */<br />
public void saveXmlFile(Document document,String filePath,String code){<br />
&nbsp; if(document==null){<br />
&nbsp; &nbsp;return ;<br />
&nbsp; }<br />
&nbsp; XMLWriter output;<br />
&nbsp; try {<br />
&nbsp; &nbsp;OutputFormat format=new OutputFormat();<br />
&nbsp; &nbsp;format.setEncoding(code);<br />
&nbsp; &nbsp;output = new XMLWriter(new FileWriter(new File(filePath)),format);<br />
&nbsp; &nbsp;output.write( document );<br />
&nbsp; &nbsp;output.close();<br />
&nbsp; } catch (IOException e) {&nbsp; &nbsp;<br />
&nbsp; &nbsp;e.printStackTrace();<br />
&nbsp; }&nbsp; <br />
}<br />
&nbsp; <br />
&nbsp; // 测试；<br />
public static void main(String[] args){<br />
&nbsp; XmlDom4J dom4jParser=new XmlDom4J();&nbsp; <br />
&nbsp; //生成XML<br />
&nbsp; //dom4jParser.createXMLFile();<br />
&nbsp; File file=new File("D:/MyWork/operateXMLfile/catalog.xml");<br />
&nbsp; //dom4jParser.saveXmlFile(document, "F://test.xml", "GBK");<br />
&nbsp; <br />
&nbsp; /*String[] attrArray=dom4jParser.getNodeAttributeValue(file, "//article/@level");<br />
&nbsp; if(attrArray!=null){<br />
&nbsp; &nbsp;for(int i=0;i&lt;attrArray.length;i++){<br />
&nbsp; &nbsp; System.out.println("Attribute is :"+attrArray[i]);<br />
&nbsp; &nbsp;}<br />
&nbsp; }*/<br />
&nbsp; <br />
&nbsp; String[] nodeText=dom4jParser.getNodeTextValue(file, "//article/title");<br />
&nbsp; if(nodeText!=null){<br />
&nbsp; &nbsp;for(int i=0;i&lt;nodeText.length;i++){<br />
&nbsp; &nbsp; System.out.println("NODE TEXT IS:"+nodeText[i]);<br />
&nbsp; &nbsp;}<br />
&nbsp; }<br />
&nbsp; <br />
}<br />
}</code>xml文件定义如下：
<div class="blockcode"><em onclick="copycode($('code1'));">复制内容到剪贴板</em>
<h5>代码:</h5>
<code id="code1">&lt;?xml version="1.0" encoding="gb2312"?&gt;<br />
&lt;catalog&gt;&lt;!--An XML Catalog--&gt;&lt;?target text?&gt;<br />
&lt;journal title="XML Zone" publisher="IBM Devoloperment"&gt;<br />
&lt;article level="小学四年级"&nbsp; date="December-2008"&gt;&lt;title&gt;又是下雨天&lt;/title&gt;<br />
&lt;author&gt;&lt;firstname&gt;Marcello&lt;/firstname&gt;&lt;lastname&gt;Vitaletti&lt;/lastname&gt;&lt;/author&gt;&lt;/article&gt;<br />
&lt;article level="大学四年级"&nbsp; date="2008-04-01"&gt;&lt;title&gt;太阳出来了&lt;/title&gt;<br />
&lt;author&gt;&lt;firstname&gt;Marcello&lt;/firstname&gt;&lt;lastname&gt;Vitaletti&lt;/lastname&gt;&lt;/author&gt;&lt;/article&gt;<br />
&lt;/journal&gt;&lt;/catalog&gt;</code></div>
<img src ="http://www.blogjava.net/tunaic/aggbug/231509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tunaic/" target="_blank">三羽</a> 2008-09-27 15:10 <a href="http://www.blogjava.net/tunaic/archive/2008/09/27/231509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Display Tag使用小记收藏</title><link>http://www.blogjava.net/tunaic/archive/2008/09/27/231504.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Sat, 27 Sep 2008 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/tunaic/archive/2008/09/27/231504.html</guid><wfw:comment>http://www.blogjava.net/tunaic/comments/231504.html</wfw:comment><comments>http://www.blogjava.net/tunaic/archive/2008/09/27/231504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tunaic/comments/commentRss/231504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tunaic/services/trackbacks/231504.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; Display Tag Lib是一个标签库，用来处理jsp网页上的Table，功能非常强，可以对的Table进行分页、数据导出、分组、对列排序等等，反正我在做项目时需要的功能它都给我提供了，而且使用起来非常的方便。能够大大减少代码量。<br />
&nbsp;&nbsp;&nbsp; 介个是Display Tag的官方网站<a href="http://displaytag.sourceforge.net/">http://displaytag.sourceforge.net/</a>。<br />
<br />
&nbsp;&nbsp;&nbsp; 首先当然是要下载它的jar包了，<a href="http://displaytag.sourceforge.net/downloads.html">这里</a>可以下载到最新的版本。将jar包放到WEB-INF的lib文件夹下。另外还需要两个辅助包：apache的commons-lang和standard包，更多的辅助包可以在这里<a href="http://displaytag.sourceforge.net/dependencies.html">下载</a>。<br />
<br />
&nbsp;&nbsp;&nbsp; 在web.xml下添加一个filter<br />
&nbsp;&nbsp;&nbsp; &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;exportFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.displaytag.filter.ResponseOverrideFilter&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 在jsp页面做一个引用：<br />
&lt;%@ taglib uri="http://displaytag.sf.net/el" prefix="display" %&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 首先我们定义一个list<br />
&lt;% <br />
&nbsp;List test = new ArrayList( 6 );<br />
&nbsp;test.add( "Test String 1" );<br />
&nbsp;test.add( "Test String 2" );<br />
&nbsp;test.add( "Test String 3" );<br />
&nbsp;test.add( "Test String 4" );<br />
&nbsp;test.add( "Test String 5" );<br />
&nbsp;test.add( "Test String 6" );<br />
&nbsp;request.setAttribute( "test", test ); <br />
%&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 当我们想在jsp页面上显示这个list时，我们只需要写一句话<br />
&nbsp;&nbsp;&nbsp; &lt;display:table name="test" /&gt;<br />
&nbsp;&nbsp;&nbsp; display tag会自动生成一个table<br />
<br />
&nbsp;&nbsp;&nbsp; 如果list是从控制层抛出来的，name可使用EL表达式表示<br />
&nbsp;&nbsp;&nbsp; &lt;display:table name="${test}" /&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 这是最简单的display tag的使用，我们可以给它加上样式等，也可以定义显示的列，下面的table显示复杂一些<br />
&lt;display:table name="test" styleClass="list" cellspacing="0" cellpadding="0"&gt;<br />
&nbsp; &lt;display:column property="id" title="ID" class="idcol"/&gt;<br />
&nbsp; &lt;display:column property="name" /&gt;<br />
&nbsp; &lt;display:column property="email" /&gt;<br />
&nbsp; &lt;display:column property="description" title="Comments"/&gt;<br />
&lt;/display:table&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 如果想要给它加个链接也很简单,下面的代码给name加了连接，并附带id参数，email也自动连接到mailto:XXX<br />
&lt;display:table name="test" styleClass="list" cellspacing="0" cellpadding="0"&gt;<br />
&nbsp; &lt;display:column property="id" title="ID" class="idcol"/&gt;<br />
&nbsp; &lt;display:column property="name" url="detail.jsp" paramId="id" paramProperty="id"/&gt;<br />
&nbsp; &lt;display:column property="email" autolink="true"/&gt;<br />
&nbsp; &lt;display:column property="description" title="Comments"/&gt;<br />
&lt;/display:table&gt;
<p>下面介绍几个Display最常用的功能，更多功能请参考<a href="http://displaytag.homeip.net/displaytag-examples-1.1/">http://displaytag.homeip.net/displaytag-examples-1.1/</a>。<br />
1. 分页<br />
&nbsp;&nbsp;&nbsp; 如果想对代码分页，只需在display:table标签中添加一项pagesize="每页显示行数"，如<br />
&lt;display:table name="test" pagesize="10"/&gt;</p>
<p>2. 对列排序<br />
&nbsp;&nbsp;&nbsp; display tag可对列进行排序，就是点击列名，对该列的数据进行排序。你只需对想要排序的列添加 sort="true" 就OK，如下面的代码可对前三列进行排序。在display:table中添加defaultsort="列数"，可默认对指定的列排序。<br />
&lt;display:table name="test" styleClass="list" cellspacing="0" cellpadding="0" defaultsort="1"&gt;<br />
&nbsp; &lt;display:column property="id" title="ID" class="idcol" sort="true"/&gt;<br />
&nbsp; &lt;display:column property="name" url="detail.jsp" paramId="id" paramProperty="id" sort="true"/&gt;<br />
&nbsp; &lt;display:column property="email" autolink="true" sort="true"/&gt;<br />
&nbsp; &lt;display:column property="description" title="Comments"/&gt;<br />
&lt;/display:table&gt;<br />
&nbsp;&nbsp; 如果table有分页，Display Tag默认只对当前页进行排序，如果想对整个list排序，可以在display:table之间添加一段代码：<br />
&lt;display:setProperty name="sort.amount" value="list"/&gt;<br />
<br />
3. 导出数据<br />
&nbsp;&nbsp;&nbsp; 在display:table中添加export="true"，看看会出现什么！Display Tag默认会提供三种数据导出方式：CSV、Excel、XML 。<br />
&nbsp;&nbsp;&nbsp; 另外Display Tag还可以导出为PDF格式，在<a href="http://prdownloads.sourceforge.net/itext/">http://prdownloads.sourceforge.net/itext/</a>下载一个辅助包iText.jar，copy到lib目录下，然后在display:table之间添加一段代码：<br />
&lt;display:setProperty name="export.pdf" value="true"/&gt;，大功告成。</p>
<p>4. Display Tag的属性设置<br />
&nbsp;&nbsp;&nbsp; 前面所说的display:setProperty&nbsp;是一种改变Display Tag属性的方法，但是在每个jsp中都要写太麻烦了。<br />
&nbsp;&nbsp;&nbsp; Display Tag中设置了很多默认的属性，它有一个专门的属性文件，是在它的jar包中的displaytag/properties/TableTag.properties<br />
&nbsp;&nbsp;&nbsp; 想要改变它的默认属性，我们可以在WEB-INF\classes下新建一个文件displaytag.properties，仿照TableTag.properties中属性的格式设置需要修改的属性。<br />
&nbsp;&nbsp;&nbsp; TableTag.properties中的# messages中设置的是显示在页面上的提示信息。默认是英文的，我们可以把它改为中文的。不过这里只能使用unicode，就是说中文字符必须转换为unicode码，这个可以使用jdk自带的native2ascii.exe进行转换。</p>
<p>5. 其它功能<br />
&nbsp;&nbsp;&nbsp; DisplayTag还有一些很实用的小功能，这里提两个。一个是对数据的Format，这是1.1版本添加的新功能，可以使用标签的方式格式化时间、数字、字符串。比如日期，在需要格式化的column标签中添加format="{0,date,yyyy-MM-dd}"，第一个参数为格式化的数据序号，第二个参数是数据类型，数字为number，第三个参数为数据格式。<br />
&nbsp;&nbsp;&nbsp; 另外一个功能是对table数据的合计功能。在table标签中添加 decorator="org.displaytag.decorator.TotalTableDecorator"，然后在想要进行合计的数据列的column标签中添加 total="true"，该列就可以被计算总数了。但这个功能有个缺点，不能用在有分页的时候，它只能合计第一页的数据。<br />
<br />
<strong>DisplayTag的不足<br />
</strong>&nbsp;&nbsp;&nbsp; 初次使用DisplayTag的人可能会觉得惊喜，但是用久了会发现很多问题，最大的问题是对中文的支持不好，比如如果查询条件中有中文，就无法翻页，无法对中文排序，将中文导出为指定文件时出现乱码等等。这些问题有时候会让人很郁闷，有时候逼得你要去修改它的源代码。下面是对以上几个问题的解决方法：<br />
&nbsp;&nbsp;&nbsp; 1. 对于中文无法翻页、排序，最简单的办法是修改Tomcat下的server.xml文件。找到HTTP的Connector标签，在里面添加一项URIEncoding="..."，引号里面的内容取决于你的页面编码，比如可以是GBK，UTF8等。这样上面两个问题就可以解决了。<br />
&nbsp;&nbsp;&nbsp; 2. 导出为文件：其实这个功能除了中文支持外还有很多其它问题，比如它会将Html标签一起导出、只导出显示的内容，但如果对table进行了decorator，decorator后的内容无法导出。如果想要将中文正确导出，需要修改DisplayTag源代码。<br />
&nbsp;&nbsp;&nbsp; 下载相同版本的源代码，在org.displaytag.export.ExcelView.java文件中找到getMimeType()方法，将此方法修改为 return "application/vnd.ms-excel;charset=GB2312";，修改后导出数据的速度会慢很多，不过将就吧。<br />
&nbsp;&nbsp;&nbsp; 3. 新版的DisplayTag1.1添加了对一次取部分数据的支持，相关的标签包括partialList和size，需要设置partialList="true"和size的大小。具体怎么用偶还没研究。<br />
<br />
<span style="font-size: 36pt; color: #993300"><strong>乱码解决：</strong></span><br />
<br />
<span style="color: red"><strong>tomcat/jboss</strong>&nbsp;&nbsp; 修改server.xml</span>
<table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%">&lt;Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" <font color="#ff0000"><strong style="color: black; background-color: #a0ffff">URIEncoding</strong>="GBK"</font> /&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<span id="topicSubject" csdnid="topicSubject"><span style="color: red"><span id="topicSubject" csdnid="topicSubject"><br />
<span style="color: #000000">.整合tomcat和apache后的设置 <br />
&nbsp;&nbsp;&nbsp; 刚开始我没有整合的时候传递的中文参数可以很好的解决，后来整合apache后，却出现乱码了，绕过apache后是正常的，所以问题出现在apache或apache和tomcat的通信上，经过baidu，好不容易找到答案。修改server.xml文件中的如下行： </span></span>
<pre class="java" style="display: none" name="code"><span style="color: #000000"> &lt;Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="UTF-8" /&gt;</span></pre>
<span style="color: #000000">&nbsp; 这出现apache和tomcat的通信上，由于我这里的整合是采用JK，tomcat使用的是ajp13协议，所以，需要在他们的通信阶段来处理编码，即代码中的URIEncoding="UTF-8"部分。<br />
&nbsp;<br />
</span><strong>websphere&nbsp; </strong></span><br />
</span></span>&#8220;服务器&#8221;--&gt;应用程序服务器，找到自己应用使用的服务器。 <br />
WS6有不同，注意。 <br />
找到&#8220;服务器基础结构&#8221;，展开其下的&#8220;Java 和进程管理&#8221;，然后进入&#8220;进程定义&#8221;。 <br />
进入后找到&#8220;其它属性&#8221;--&gt;&#8220;Java 虚拟机&#8221;： <br />
将&#8220;Java 虚拟机&#8221;通用 JVM 参数 设置为：-Dfile.encoding=GBK<br />
<br />
<span style="color: red"><strong>weblogic<br />
</strong></p>
<font style="font-size: 10pt" color="#000000">
<div id="art" style="margin: 15px">
<div><font size="3">【关键字】 Tomcat容器 中文 字符编码 乱码 <strong style="color: black; background-color: #ffff66">Weblogic</strong>容器 服务器</font></div>
<div><font size="3">【正文】因为编码方式的不同在使用Tomcat容器时会出现提交到Servlet的中文是乱码的方式，而且Tomcat5.x对于POST和GET的方式处理似乎还有不同，POST方式是采用Filter的方式即可，怎样能够处理GET方式中文提交乱码的问题呢？</font></div>
<div><font size="3"></font>&nbsp;<font size="3">可以采用配置服务器字符编码的方法，具体操作如下：</font></div>
<div><font size="3">1、打开Tomcat安装目录中的conf目录</font></div>
<div><font size="3">2、修改server.xml中的connector一个子项，具体可能类似如下:</font></div>
<table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%">&lt;Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" /&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><font size="3">在其中添加<strong style="color: black; background-color: #a0ffff">URIEncoding</strong>="GBK" ，或者是其他的编码方式，变成如下：</font></p>
<table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%">&lt;Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" <font color="#ff0000"><strong style="color: black; background-color: #a0ffff">URIEncoding</strong>="GBK"</font> /&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><font size="3">3、停止Tomcat服务，重新启动Tomcat服务即可。</font></p>
<p><font size="3">【另附<strong style="color: black; background-color: #ffff66">Weblogic</strong>容器处理编码的方式】</font></p>
<p><font size="3">处理<strong style="color: black; background-color: #ffff66">Weblogic</strong>容器的编码比较简单，只需要在站点的web.xml中配置一行如下的代码即可。</font></p>
<table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%">&lt;context-param&gt; &lt;param-name&gt;<strong style="color: black; background-color: #ffff66">weblogic</strong>.httpd.inputCharset./*&lt;/param-name&gt; &lt;param-value&gt;GBK&lt;/param-value&gt; &lt;/context-param&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><font size="3">【另附Tomcat处理POST提交乱码的方式】</font></p>
<div><font size="3">1、首先在web.xml中配置过滤器</font></div>
<table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%">&lt;filter&gt; &lt;filter-name&gt;SetCharacterEncodingFilter&lt;/filter-name&gt; &lt;filter-class&gt; cn.cublog.jedliu.SetCharacterEncodingFilter &lt;/filter-class&gt; &lt;init-param&gt; &lt;param-name&gt;encoding&lt;/param-name&gt; &lt;param-value&gt;GBK&lt;/param-value&gt; &lt;/init-param&gt; &lt;/filter&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%">&lt;filter-mapping&gt; &lt;filter-name&gt;SetCharacterEncodingFilter&lt;/filter-name&gt; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt; &lt;/filter-mapping&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><font size="3">2、在cn.cublog.jedliu包中SetCharacterEncodingFilter是用于来实现编码的过滤器。</font></p>
<table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%"><code><span style="color: #000000"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> SetCharacterEncodingFilter <span style="color: #0000ff">implements</span> <span style="color: #ff0000">Filter</span> <span style="color: #0000cc">{</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">protected</span> <span style="color: #ff0000">String</span> <span style="color: #ff0000">encoding</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">null</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">protected</span> FilterConfig filterConfig <span style="color: #0000cc">=</span> <span style="color: #0000ff">null</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">protected</span> <span style="color: #0000ff">boolean</span> ignore <span style="color: #0000cc">=</span> true<span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #ff0000">destroy</span><span style="color: #0000cc">(</span><span style="color: #0000cc">)</span> <span style="color: #0000cc">{</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span><span style="color: #0000cc">.</span><span style="color: #ff0000">encoding</span> <span style="color: #0000cc">=</span> <span style="color: #0000ff">null</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span><span style="color: #0000cc">.</span>filterConfig <span style="color: #0000cc">=</span> <span style="color: #0000ff">null</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> doFilter<span style="color: #0000cc">(</span>ServletRequest <span style="color: #ff0000">request</span><span style="color: #0000cc">,</span> ServletResponse response<span style="color: #0000cc">,</span>FilterChain chain<span style="color: #0000cc">)</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">throws</span> <span style="color: #ff0000">IOException</span><span style="color: #0000cc">,</span> ServletException <span style="color: #0000cc">{</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span> <span style="color: #0000cc">(</span>ignore <span style="color: #0000cc">|</span><span style="color: #0000cc">|</span> <span style="color: #0000cc">(</span><span style="color: #ff0000">request</span><span style="color: #0000cc">.</span>getCharacterEncoding<span style="color: #0000cc">(</span><span style="color: #0000cc">)</span> <span style="color: #0000cc">=</span><span style="color: #0000cc">=</span> <span style="color: #0000ff">null</span><span style="color: #0000cc">)</span><span style="color: #0000cc">)</span> <span style="color: #0000cc">{</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">String</span> <span style="color: #ff0000">encoding</span> <span style="color: #0000cc">=</span> selectEncoding<span style="color: #0000cc">(</span><span style="color: #ff0000">request</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span> <span style="color: #0000cc">(</span><span style="color: #ff0000">encoding</span> <span style="color: #0000cc">!</span><span style="color: #0000cc">=</span> <span style="color: #0000ff">null</span><span style="color: #0000cc">)</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">request</span><span style="color: #0000cc">.</span>setCharacterEncoding<span style="color: #0000cc">(</span><span style="color: #ff0000">encoding</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain<span style="color: #0000cc">.</span>doFilter<span style="color: #0000cc">(</span><span style="color: #ff0000">request</span><span style="color: #0000cc">,</span> response<span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #ff0000">init</span><span style="color: #0000cc">(</span>FilterConfig filterConfig<span style="color: #0000cc">)</span> <span style="color: #0000ff">throws</span> ServletException <span style="color: #0000cc">{</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">this</span><span style="color: #0000cc">.</span>filterConfig <span style="color: #0000cc">=</span> filterConfig<span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span><span style="color: #0000cc">.</span><span style="color: #ff0000">encoding</span> <span style="color: #0000cc">=</span> filterConfig<span style="color: #0000cc">.</span>getInitParameter<span style="color: #0000cc">(</span><span style="color: #ff00ff">"encoding"</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">String</span> <span style="color: #ff0000">value</span> <span style="color: #0000cc">=</span> filterConfig<span style="color: #0000cc">.</span>getInitParameter<span style="color: #0000cc">(</span><span style="color: #ff00ff">"ignore"</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span> <span style="color: #0000cc">(</span><span style="color: #ff0000">value</span> <span style="color: #0000cc">=</span><span style="color: #0000cc">=</span> <span style="color: #0000ff">null</span><span style="color: #0000cc">)</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span><span style="color: #0000cc">.</span>ignore <span style="color: #0000cc">=</span> true<span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> <span style="color: #0000cc">(</span><span style="color: #ff0000">value</span><span style="color: #0000cc">.</span><span style="color: #ff0000">equalsIgnoreCase</span><span style="color: #0000cc">(</span><span style="color: #ff00ff">"true"</span><span style="color: #0000cc">)</span><span style="color: #0000cc">)</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span><span style="color: #0000cc">.</span>ignore <span style="color: #0000cc">=</span> true<span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> <span style="color: #0000cc">(</span><span style="color: #ff0000">value</span><span style="color: #0000cc">.</span><span style="color: #ff0000">equalsIgnoreCase</span><span style="color: #0000cc">(</span><span style="color: #ff00ff">"yes"</span><span style="color: #0000cc">)</span><span style="color: #0000cc">)</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span><span style="color: #0000cc">.</span>ignore <span style="color: #0000cc">=</span> true<span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">else</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span><span style="color: #0000cc">.</span>ignore <span style="color: #0000cc">=</span> false<span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">protected</span> <span style="color: #ff0000">String</span> selectEncoding<span style="color: #0000cc">(</span>ServletRequest <span style="color: #ff0000">request</span><span style="color: #0000cc">)</span> <span style="color: #0000cc">{</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">return</span> <span style="color: #0000cc">(</span><span style="color: #0000ff">this</span><span style="color: #0000cc">.</span><span style="color: #ff0000">encoding</span><span style="color: #0000cc">)</span><span style="color: #0000cc">;</span><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc">}</span><br />
            <span style="color: #0000cc">}</span></span></code></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
</font></span>
<img src ="http://www.blogjava.net/tunaic/aggbug/231504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tunaic/" target="_blank">三羽</a> 2008-09-27 15:03 <a href="http://www.blogjava.net/tunaic/archive/2008/09/27/231504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>servlet 和JSP的上传下载</title><link>http://www.blogjava.net/tunaic/archive/2008/09/27/231502.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Sat, 27 Sep 2008 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/tunaic/archive/2008/09/27/231502.html</guid><wfw:comment>http://www.blogjava.net/tunaic/comments/231502.html</wfw:comment><comments>http://www.blogjava.net/tunaic/archive/2008/09/27/231502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tunaic/comments/commentRss/231502.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tunaic/services/trackbacks/231502.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 具体可以看下面的例子:主要是SERVLETpackage oa.home.servlet;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import java.sql.*;import org.apache.commons.fileupload.D...&nbsp;&nbsp;<a href='http://www.blogjava.net/tunaic/archive/2008/09/27/231502.html'>阅读全文</a><img src ="http://www.blogjava.net/tunaic/aggbug/231502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tunaic/" target="_blank">三羽</a> 2008-09-27 14:58 <a href="http://www.blogjava.net/tunaic/archive/2008/09/27/231502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>