﻿<?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-Bob-文章分类-tag</title><link>http://www.blogjava.net/keweibo/category/25865.html</link><description>As long as you are there to lead me ,I won't lose my way </description><language>zh-cn</language><lastBuildDate>Tue, 20 Apr 2010 23:41:44 GMT</lastBuildDate><pubDate>Tue, 20 Apr 2010 23:41:44 GMT</pubDate><ttl>60</ttl><item><title>FreemarkerServlet in web.xml</title><link>http://www.blogjava.net/keweibo/articles/318771.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Mon, 19 Apr 2010 13:16:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/318771.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/318771.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/318771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/318771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/318771.html</trackback:ping><description><![CDATA[&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;freemarker&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;freemarker.ext.servlet.FreemarkerServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;TemplatePath&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;NoCache&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;ContentType&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;text/html&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- FreeMarker settings: --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;template_update_delay&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;0&lt;/param-value&gt; &lt;!-- 0 is for development only! Use higher value otherwise. --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;default_encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-name&gt;locale&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-value&gt;zh_CN&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;number_format&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;0.##########&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
<br />
&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;freemarker&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.ftl&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;<br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/318771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2010-04-19 21:16 <a href="http://www.blogjava.net/keweibo/articles/318771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DisplayTag应用指南</title><link>http://www.blogjava.net/keweibo/articles/160617.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Wed, 14 Nov 2007 12:08:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/160617.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/160617.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/160617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/160617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/160617.html</trackback:ping><description><![CDATA[<p><span style="color: red">文章出处:http://www.javaresearch.org/article/42943.htm</span><br />
&nbsp;&nbsp;DisplayTag是一个非常好用的表格显示标签，适合MVC模式，其主页在<a href="http://displaytag.sourceforge.net/">http://displaytag.sourceforge.net</a>&nbsp;&nbsp;<br />
一、最简单的情况，未使用&lt;display:column/&gt;标签<br />
&nbsp;&nbsp;&lt;%request.setAttribute(&nbsp;"test",&nbsp;new&nbsp;ReportList(6)&nbsp;);%&gt;<br />
&nbsp;&nbsp;&lt;display:table&nbsp;name="test"&nbsp;/&gt;<br />
&nbsp;&nbsp;标签遍历List里的每一个对象，并将对象里的所有属性显示出来。一般用于开发的时候检查对象数据的完整性。<br />
&nbsp;&nbsp;<br />
二、使用&lt;display:column/&gt;标签的情况<br />
&lt;display:table&nbsp;name="test"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="name"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="description"&nbsp;title="Comments"/&gt;<br />
&lt;/display:table&gt;<br />
&nbsp;&nbsp;&nbsp;property对应List里对象的属性（用getXXX()方法取得），title则对应表格表头里的列名。定义列有两种方式：<br />
&nbsp;&nbsp;&nbsp;A、&lt;display:column&nbsp;property="email"&nbsp;/&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用&lt;display:column/&gt;标签里的property属性来定义<br />
&nbsp;&nbsp;&nbsp;B、&lt;display:column&nbsp;title="email"&gt;email@it.com&lt;/display:column&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&lt;display:column/&gt;标签体里增加内容，可以是常量，也可以用其他标签等等<br />
&nbsp;&nbsp;&nbsp;两种方式比较，用property属性来定义更加快速和利于排序。<br />
&nbsp;&nbsp;&nbsp;<br />
三、表格显示样式的定义<br />
&nbsp;&nbsp;A、在&lt;display:table/&gt;和&lt;display:column/&gt;标签里指定标准的html属性，烦琐<br />
&nbsp;&nbsp;B、修改样式表<br />
&lt;display:table&nbsp;name="test"&nbsp;class="mars"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;class="idcol"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="name"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;class="tableCellError"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="description"&nbsp;title="Comments"/&gt;<br />
&lt;/display:table&gt;<br />
&nbsp;&nbsp;&nbsp;通过class属性来指定所要应用的样式。可以在其默认样式表里（./css/screen.css）直接修改<br />
&nbsp;&nbsp;&nbsp;<br />
四、标签取得数据的数据源<br />
&nbsp;&nbsp;有四种范围<br />
&nbsp;&nbsp;&nbsp;pageScope&nbsp;<br />
&nbsp;&nbsp;&nbsp;requestScope&nbsp;(默认)&nbsp;&nbsp;&lt;display:table&nbsp;name="test2"&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;sessionScope&nbsp;&nbsp;&lt;display:table&nbsp;name="sessionScope.holder.list"&nbsp;&gt;&nbsp;注意，这里要指定范围，非默认<br />
&nbsp;&nbsp;&nbsp;applicationScope&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
五、通过增加id属性创建隐含的对象<br />
&lt;display:table&nbsp;name="test"&nbsp;id="testit"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="name"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;title="static&nbsp;value"&gt;static&lt;/display:column&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;title="row&nbsp;number&nbsp;(testit_rowNum)"&gt;&lt;%=pageContext.getAttribute("testit_rowNum")%&gt;&lt;/display:column&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;title="((ListObject)testit).getMoney()"&gt;&lt;%=((ListObject)pageContext.getAttribute("testit")).getMoney()%&gt;&lt;/display:column&gt;<br />
&lt;/display:table&gt;<br />
&nbsp;&nbsp;&nbsp;注意到在&lt;display:table/&gt;里增加了id属性，这时就在page&nbsp;context里创建了一个隐含对象，指向List里的当前对象，<br />
&nbsp;&nbsp;&nbsp;可以通过(ListObject)pageContext.getAttribute("id")来捕获这个对象。同时还创建了一个id_rowNum对象，同样，可<br />
&nbsp;&nbsp;&nbsp;通过pageContext.getAttribute("testit_rowNum")来捕获，它仅仅代表当前行的行数。<br />
&nbsp;&nbsp;&nbsp;有了这两个隐含对象，就可以通过其他标签来访问，例如Jstl:<br />
&nbsp;&nbsp;&lt;display:table&nbsp;id="row"&nbsp;name="mylist"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;title="row&nbsp;number"&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:out&nbsp;value="${row_rowNum}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/display:column&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;title="name"&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:out&nbsp;value="${row.first_name}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:out&nbsp;value="${row.last_name}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/display:column&gt;<br />
&nbsp;&nbsp;&lt;/display:table&gt;<br />
&nbsp;&nbsp;<br />
六、显示部分数据<br />
&nbsp;&nbsp;&nbsp;显示开始五条数据：通过设定length属性<br />
&lt;display:table&nbsp;name="test"&nbsp;length="5"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;/&gt;<br />
&lt;/display:table&gt;<br />
&nbsp;&nbsp;&nbsp;显示第三到第八条数据：通过设定offset和length属性<br />
&lt;display:table&nbsp;name="test"&nbsp;offset="3"&nbsp;length="5"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;/&gt;<br />
&lt;/display:table&gt;&nbsp;&nbsp;<br />
<br />
七、对email和url地址的直接连接<br />
&nbsp;&lt;display:table&nbsp;name="test"&nbsp;&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;autolink="true"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="url"&nbsp;autolink="true"&nbsp;/&gt;<br />
&nbsp;&lt;/display:table&gt;<br />
&nbsp;如果要显示的对象里包含email和url地址，则可以在display:column里直接设定autolink="true"来直接连接<br />
&nbsp;<br />
八、使用装饰模式转换数据显示（写自己的&nbsp;decorator&nbsp;）<br />
&nbsp;&nbsp;A、对整个表格应用decorator<br />
&nbsp;&nbsp;&lt;display:table&nbsp;name="test"&nbsp;decorator="org.displaytag.sample.Wrapper"&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="date"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="money"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;/display:table&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.displaytag.sample.Wrapper即自己写的decorator，它要继承TableDecorator类，看看它的一个方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getMoney()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.moneyFormat.format(((ListObject)&nbsp;this.getCurrentRowObject()).getMoney());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;很明显，它通过父类的getCurrentRowObject()方法获得当前对象，然后对其getMoney()方法进行&#8216;油漆&#8217;<br />
&nbsp;&nbsp;B、对单独的column应用decorator<br />
&nbsp;&nbsp;&lt;display:table&nbsp;name="test"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="date"&nbsp;decorator="org.displaytag.sample.LongDateWrapper"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;/display:table&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.displaytag.sample.LongDateWrapper要实现ColumnDecorator接口，它的方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;String&nbsp;decorate(Object&nbsp;columnValue)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date&nbsp;=&nbsp;(Date)&nbsp;columnValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.dateFormat.format(date);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;显然，它获得不了当前对象（因为它实现的是接口），仅仅是获得该对象的columnValue，然后&#8216;油漆&#8217;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
九、创建动态连接<br />
&nbsp;&nbsp;&nbsp;有两种方法创建动态连接：<br />
&nbsp;&nbsp;&nbsp;A、在&lt;display:column/&gt;里通过增加href、paramId、paramName、paramScope、paramProperty属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;基本的URL&nbsp;地址<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paramId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;加在URL&nbsp;地址后的参数名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paramName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据bean的名称，一般为null（即使用当前List里的对象）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paramScope&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据bean的范围，一般为null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paramProperty&nbsp;&nbsp;&nbsp;&nbsp;数据bean的属性名称，用来填充URL&nbsp;地址后的参数值<br />
&lt;display:table&nbsp;name="sessionScope.details"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;href="details.jsp"&nbsp;paramId="id"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;href="details.jsp"&nbsp;paramId="action"&nbsp;paramName="testparam"&nbsp;paramScope="request"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;href="details.jsp"&nbsp;paramId="id"&nbsp;paramProperty="id"&nbsp;/&gt;<br />
&lt;/display:table&gt;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;这种方法简便直接，但缺点是无法产生类似details.jsp?id=xx&amp;action=xx的复合URL<br />
&nbsp;&nbsp;&nbsp;B、应用decorator&nbsp;创建动态连接：<br />
&lt;display:table&nbsp;name="sessionScope.details"&nbsp;decorator="org.displaytag.sample.Wrapper"&nbsp;&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="link1"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="link2"&nbsp;title="Actions"&nbsp;/&gt;<br />
&lt;/display:table&gt;<br />
&nbsp;&nbsp;&nbsp;org.displaytag.sample.Wrapper里的方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getLink1()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListObject&nbsp;lObject=&nbsp;(ListObject)getCurrentRowObject();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;lIndex=&nbsp;getListIndex();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"&lt;a&nbsp;href=\"details.jsp?index="&nbsp;+&nbsp;lIndex&nbsp;+&nbsp;"\"&gt;"&nbsp;+&nbsp;lObject.getId()&nbsp;+&nbsp;"&lt;/a&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getLink2()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListObject&nbsp;lObject=&nbsp;(ListObject)getCurrentRowObject();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;lId=&nbsp;lObject.getId();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"&lt;a&nbsp;href=\"details.jsp?id="&nbsp;+&nbsp;lId<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;"&amp;action=view\"&gt;View&lt;/a&gt;&nbsp;|&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;"&lt;a&nbsp;href=\"details.jsp?id="&nbsp;+&nbsp;lId<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;"&amp;action=edit\"&gt;Edit&lt;/a&gt;&nbsp;|&nbsp;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;"&lt;a&nbsp;href=\"details.jsp?id="&nbsp;+&nbsp;lId<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;"&amp;action=delete\"&gt;Delete&lt;/a&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
十、分页<br />
&nbsp;&nbsp;&nbsp;实现分页非常的简单，增加一个pagesize属性指定一次想显示的行数即可<br />
&lt;display:table&nbsp;name="sessionScope.test"&nbsp;pagesize="10"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="name"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;/&gt;<br />
&lt;/display:table&gt;<br />
<br />
十一、排序<br />
&nbsp;&nbsp;&nbsp;排序实现也是很简单，在需要排序的column里增加sortable="true"属性，headerClass="sortable"仅仅是<br />
&nbsp;&nbsp;&nbsp;指定显示的样式。column里的属性对象要实现Comparable接口，如果没有的话可以应用decorator<br />
&nbsp;&nbsp;&nbsp;defaultsort="1"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认第一个column排序<br />
&nbsp;&nbsp;&nbsp;defaultorder="descending"&nbsp;&nbsp;&nbsp;&nbsp;默认递减排序<br />
&lt;display:table&nbsp;name="sessionScope.stest"&nbsp;defaultsort="1"&nbsp;defaultorder="descending"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"&nbsp;sortable="true"&nbsp;headerClass="sortable"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="name"&nbsp;sortable="true"&nbsp;headerClass="sortable"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;sortable="true"&nbsp;headerClass="sortable"/&gt;<br />
&lt;/display:table&gt;<br />
&nbsp;&nbsp;注意的是，当同时存在分页时如果不指定sort=list,则排序仅仅针对的是当前页面，而不是整个List都进行排序<br />
&nbsp;&nbsp;<br />
十二、column&nbsp;分组<br />
&nbsp;&nbsp;&nbsp;分组只是需要在column里增加group属性<br />
&lt;display:table&nbsp;name="test"&nbsp;class="simple"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="city"&nbsp;title="CITY"&nbsp;group="1"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="project"&nbsp;title="PROJECT"&nbsp;group="2"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="amount"&nbsp;title="HOURS"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="task"&nbsp;title="TASK"/&gt;<br />
&lt;/display:table&gt;<br />
<br />
十三、导出数据到其他格式（页面溢出filter??）<br />
&nbsp;&nbsp;&nbsp;在&lt;display:table/&gt;里设定export="true"<br />
&nbsp;&nbsp;&nbsp;在&lt;display:column/&gt;里设定media="csv&nbsp;excel&nbsp;xml&nbsp;pdf"&nbsp;决定该字段在导出到其他格式时被包不包含，不设定则都包含<br />
&nbsp;&nbsp;&nbsp;&lt;display:setProperty&nbsp;name="export.csv"&nbsp;value="false"&nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;决定该种格式能不能在页面中导出<br />
&lt;display:table&nbsp;name="test"&nbsp;export="true"&nbsp;id="currentRowObject"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="id"&nbsp;title="ID"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="email"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="status"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="longDescription"&nbsp;media="csv&nbsp;excel&nbsp;xml&nbsp;pdf"&nbsp;title="Not&nbsp;On&nbsp;HTML"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;media="csv&nbsp;excel"&nbsp;title="URL"&nbsp;property="url"/&gt;<br />
&nbsp;&nbsp;&lt;display:setProperty&nbsp;name="export.pdf"&nbsp;value="true"&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;display:setProperty&nbsp;name="export.csv"&nbsp;value="false"&nbsp;/&gt;<br />
&lt;/display:table&gt;<br />
<br />
十四、配置属性，覆盖默认<br />
&nbsp;&nbsp;两种方法：<br />
&nbsp;&nbsp;A、在程序classpath下新建displaytag.properties文件<br />
&nbsp;&nbsp;B、对于单个表格，应用&lt;display:setProperty&gt;标签<br />
&nbsp;&nbsp;具体可配置的属性：<a href="http://displaytag.sourceforge.net/configuration.html">http://displaytag.sourceforge.net/configuration.html</a><br />
&nbsp;&nbsp;<br />
十五、一个完整的例子<br />
&lt;display:table&nbsp;name="test"&nbsp;export="true"&nbsp;sort="list"&nbsp;pagesize="8"&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="city"&nbsp;title="CITY"&nbsp;group="1"&nbsp;sortable="true"&nbsp;headerClass="sortable"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="project"&nbsp;title="PROJECT"&nbsp;group="2"&nbsp;sortable="true"&nbsp;headerClass="sortable"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="amount"&nbsp;title="HOURS"/&gt;<br />
&nbsp;&nbsp;&lt;display:column&nbsp;property="task"&nbsp;title="TASK"/&gt;<br />
&lt;/display:table&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;sort="list"&nbsp;对整个list进行排序<br />
&nbsp;&nbsp;&nbsp;导出数据到其他格式时，group无效 </p>
<img src ="http://www.blogjava.net/keweibo/aggbug/160617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2007-11-14 20:08 <a href="http://www.blogjava.net/keweibo/articles/160617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于displaytag1.1的两种分页</title><link>http://www.blogjava.net/keweibo/articles/160614.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Wed, 14 Nov 2007 11:55:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/160614.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/160614.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/160614.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/160614.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/160614.html</trackback:ping><description><![CDATA[<p><span style="color: red">文章出处:http://blog.csdn.net/shrek_xu/archive/2006/06/01/767885.aspx<br />
</span><br />
最近因为项目需要,所以想把原来使用的displaytag1.0升级为displaytag1.1,其实升级的原因很简单,1.0实在是太傻了,每次分页还需要将所有数据一次载入,效率低到无法忍受:)</p>
<p>1.1版最大的改进可以说是终于支持了大家期待以久的分次加载功能了,想显示多少数据就载入多少数据.1.1版本支持两种方式的分页,第一种是实现其<font face="Courier New">org.displaytag.pagination.PaginatedList</font> 接口,第二种是在页面和后台同时做修改来实现分页功能.在网上关于第二种分页的使用方法介绍的非常多,而且官方文档上面写的也比较详细,所以在这里我主要介绍自己是如何使用第一种方式进行分页的,且这种方式也是官方推荐分页方式(自己摸索的,呵呵,不好不要见怪)</p>
<p>首先写一个此接口的实现类</p>
<p>/**<br />
&nbsp;* PaginatedListImpl<br />
&nbsp;* User:&nbsp;shrek_xu<br />
&nbsp;* Date: 2006-5-30<br />
&nbsp;* Time: 20:35:18<br />
&nbsp;* <br />
&nbsp;*&nbsp;totalNum 所有条目数目<br />
&nbsp;*&nbsp;currentPage 当前所在页号<br />
&nbsp;*&nbsp;objectsPerPage 每页显示条数<br />
&nbsp;* list 此页所需要显示的数据<br />
&nbsp;*/<br />
public class PaginatedListHelper implements PaginatedList{<br />
&nbsp;&nbsp;&nbsp; private List list;<br />
&nbsp;&nbsp;&nbsp; private int pageNumber = 1;<br />
&nbsp;&nbsp;&nbsp; private int objectsPerPage = 20;<br />
&nbsp;&nbsp;&nbsp; private int fullListSize = 0;<br />
&nbsp;&nbsp;&nbsp; private String sortCriterion;<br />
&nbsp;&nbsp;&nbsp; private SortOrderEnum sortDirection;<br />
&nbsp;&nbsp;&nbsp; private String searchId;</p>
<p>&nbsp;&nbsp;&nbsp; public List getList() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return list;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setList(List list) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.list = list;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public int getPageNumber() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return pageNumber;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setPageNumber(int pageNumber) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageNumber = pageNumber;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public int getObjectsPerPage() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return objectsPerPage;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setObjectsPerPage(int objectsPerPage) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.objectsPerPage = objectsPerPage;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public int getFullListSize() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return fullListSize;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setFullListSize(int fullListSize) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.fullListSize = fullListSize;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getSortCriterion() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sortCriterion;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setSortCriterion(String sortCriterion) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sortCriterion = sortCriterion;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public SortOrderEnum getSortDirection() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sortDirection;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setSortDirection(SortOrderEnum sortDirection) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sortDirection = sortDirection;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getSearchId() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return searchId;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setSearchId(String searchId) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.searchId = searchId;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>然后在使用的时候只需要创建此类的一个实例,且将所需要的参数通过set方法赋值进去就可以了</p>
<p>&nbsp;int page;</p>
<p>/*<br />
&nbsp;*其中request中的page参数为displaytag中的默认当前页数,当然也可以使用*TableTagParameters.SORT_AMOUNT_PAGE来表示当前页数<br />
&nbsp;*/<br />
&nbsp;if(request.getParameter("page")!=null &amp;&amp; !"".equals(request.getParameter("page"))){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;page=Integer.parseInt(request.getParameter("page"));<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;page=1;<br />
&nbsp;&nbsp;}<br />
PaginatedList paginaredList=new PaginatedListHelper();</p>
<p>&nbsp;paginaredList.setPageNumber(page);</p>
<p>// 此页要显示的list数据</p>
<p>List list=.......;</p>
<p>paginaredList.setList(list);</p>
<p>// 总共有多少数据,他会根据所有数目和每页数目自动统计页数</p>
<p>paginaredList.setFullListSize(...);</p>
<p>// 如果你只设定这几个参数,那么其余的参数将会默认为你实现类中所赋的初值</p>
<p>最后,你还需要将这个实例放入到request或session中去,好让displaytag知道这个是外部分页</p>
<p>request.setAttribute("pageList",paginaredList);</p>
<p>在前台只需象下面这样写就可以了</p>
<p>&lt;display:table name="${pageList}" id="list" requestURI=""&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="id"/&gt;</p>
<p>&lt;/display:table&gt;</p>
<p>最开始我对每次都要传入总共有多少条数据表示疑问,认为这个没有必要,只需要第一次传入就可以了,但是后来仔细想想,因为整个分页过程是动态的,所以,很有可能在你翻页的同时,原来的数据已经发生了变化,所以每次传入总数目是很有必要的</p>
<p>如果大家需要转载,请你也附上此文连接</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/160614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2007-11-14 19:55 <a href="http://www.blogjava.net/keweibo/articles/160614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>toGBK(使用EL函数)</title><link>http://www.blogjava.net/keweibo/articles/146939.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Thu, 20 Sep 2007 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/146939.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/146939.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/146939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/146939.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/146939.html</trackback:ping><description><![CDATA[<p><span style="color: red">ToGBKFuncs.java</span><br />
package dgut.ke.el;</p>
<p>public class ToGBKFuncs {</p>
<p>&nbsp;public static String toGBK(String str ,String charset)<br />
&nbsp;&nbsp;&nbsp;throws java.io.UnsupportedEncodingException<br />
&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new String(str.getBytes(charset),"GBK");<br />
&nbsp;}<br />
}<br />
<span style="color: red">WEB-INF\tlds\myfuncs.tld<br />
</span>&lt;taglib xmlns="http://java.sun.com/xml/ns/j2ee"<br />
&nbsp;&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptagliblibrary_2_0.xsd"<br />
&nbsp;&nbsp;version="2.0"&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;tlib-version&gt;1.0&lt;/tlib-version&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;uri&gt;/myfuncs&lt;/uri&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;function&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;name&gt;toGBK&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;function-class&gt;dgut.ke.el.ToGBKFuncs&lt;/function-class&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;function-signature&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;java.lang.String toGBK(java.lang.String,java.lang.String)<br />
&nbsp;&nbsp;&nbsp;&lt;/function-signature&gt;<br />
&nbsp;&nbsp;&lt;/function&gt;<br />
&lt;/taglib&gt;<br />
<span style="color: red">&nbsp;test.jsp</span></p>
<p>&lt;%@ page language="java" pageEncoding="GBK"%&gt;<br />
&lt;%@ taglib prefix="myfn" uri="/myfuncs" %&gt;</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />
&lt;html&gt;<br />
&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;Tag&lt;/title&gt;<br />
&nbsp; &lt;/head&gt;<br />
&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;欢迎你的到来&nbsp;${myfn:toGBK(param.username,"ISO8859-1")} !<br />
&nbsp; &lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/146939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2007-09-20 22:40 <a href="http://www.blogjava.net/keweibo/articles/146939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决DisplayTag有中文条件时的分页问题</title><link>http://www.blogjava.net/keweibo/articles/145314.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Sat, 15 Sep 2007 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/145314.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/145314.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/145314.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/145314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/145314.html</trackback:ping><description><![CDATA[<p>很早就开始用DisplayTag了，真得很方便，不用考虑分页，表格等问题。</p>
<p>但是有一个问题一直困扰我，就是有中文作为表单提交内容的时候，翻页就不能用了，中文变成了乱码。</p>
<p>表单传送时，<!--startfragment --> form的提交采用的是Post方法，这没错，但链接采用的是Get方法，问题就出在这里，因为和Tomcat4相比，Tomcat5的post和get采用的方式不再相同了，汉字编码的实现方式也不同了。</p>
<p>Post是将地址传送一次，将form的数据单独提交，而Get则是将地址和参数一起传送，传送的不止是form的数据。<br />
<br />
<!--startfragment -->&nbsp;<a>默认情况下，Tomcat对请求采用的默认编码是ISO-8859-1，</a><a>这样我们提交的汉字被认为是ISO-8859-1的编码，所以在程序中接收时显示乱码</a>。&nbsp;<!--startfragment --> 在过滤器中调用request.setCharacterEncoding("GBK")，那么Post上来的汉字将被认为是GBK编码，而Tomcat5对于Get请求上来的编码并不根据过滤器的设定辨认编码方式，默认的依然是ISO-8859-1，<a>所以，即使你的页面使用默认的编码方式进行编码，然后使用ISO-8859-1进行解码，得到的结果也不对</a>。 </p>
<p>解决方法：<br />
<a>在Server.xml的connector部分设定URIEncoding的值，根据编码方式指定自己的值</a>就可以了<br />
例如：URIEncoding="GB2312"</p>
<p>&nbsp;</p>
<br />
<div align="center"><script type="text/javascript"><!--google_ad_client = "pub-9648238652058580"; google_ad_width="468;google_ad_height" = 60; google_ad_format="468x60_as" ; google_ad_type="text" ; google_ad_channel="" ; google_color_border="336699" ; google_color_bg="FFFFFF" ; google_color_link="0000FF" ; google_color_url="008000" ; google_color_text="000000" ;//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script></div>
<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=679832</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/145314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2007-09-15 10:34 <a href="http://www.blogjava.net/keweibo/articles/145314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用displaytag在struts中完成大数据量分页</title><link>http://www.blogjava.net/keweibo/articles/145313.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Sat, 15 Sep 2007 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/145313.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/145313.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/145313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/145313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/145313.html</trackback:ping><description><![CDATA[<p>应用displaytag在struts中完成大数据量分页显示，Oracle数据库</p>
<p>&nbsp;</p>
<p>JSP文件：</p>
<p>&nbsp;</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_2_54_Open_Image" onclick="this.style.display='none'; document.getElementById('_2_54_Open_Text').style.display='none'; document.getElementById('_2_54_Closed_Image').style.display='inline'; document.getElementById('_2_54_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_2_54_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2_54_Closed_Text').style.display='none'; document.getElementById('_2_54_Open_Image').style.display='inline'; document.getElementById('_2_54_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="_2_54_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_2_54_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;taglib&nbsp;uri</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/WEB-INF/displaytag.tld</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;prefix</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">disp</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">disp:table&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="resultList"</span><span style="color: #ff0000">&nbsp;export</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;pagesize</span><span style="color: #0000ff">="100"</span><span style="color: #ff0000">&nbsp;requestURI</span><span style="color: #0000ff">="logQueryAction.do"</span><span style="color: #ff0000">&nbsp;sort</span><span style="color: #0000ff">="external"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="element"</span><span style="color: #ff0000">&nbsp;partialList</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;size</span><span style="color: #0000ff">="resultSize"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">disp:column&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="operdate"</span><span style="color: #ff0000">&nbsp;title</span><span style="color: #0000ff">="操作时间"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">disp:column</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">disp:column&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="pername"</span><span style="color: #ff0000">&nbsp;title</span><span style="color: #0000ff">="操作人员"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">disp:column</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">disp:column&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="opertype"</span><span style="color: #ff0000">&nbsp;title</span><span style="color: #0000ff">="操作类型"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">disp:column</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">disp:table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span></div>
</div>
<p>&nbsp;</p>
<p>name="resultList" 将记录集存在session或者request中的键值<br />
export="true" 是否显示导出选项<br />
pagesize="100" 每页显示100条数据<br />
requestURI="logQueryAction.do"&nbsp; struts中action的名称，如果记录少，可以直接分页<br />
sort="external"&nbsp; 外部排序<br />
id="element"&nbsp;&nbsp; 表格id值，用于程序得相关的参数<br />
partialList="true"&nbsp; 分段从数据库中读数据<br />
size="resultSize"&nbsp; 记录的总条数，用于计算总页数</p>
<p>&nbsp;</p>
<p>struts action:</p>
<p>&nbsp;</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">String&nbsp;pageIndexName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;org.displaytag.util.ParamEncoder(</span><span style="color: #000000">"</span><span style="color: #000000">element</span><span style="color: #000000">"</span><span style="color: #000000">).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);&nbsp;&nbsp; // 页数的参数名<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;pageSize&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">;&nbsp;&nbsp; //每页显示的条数<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;pageIndex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GenericValidator.isBlankOrNull(request.getParameter(pageIndexName))</span><span style="color: #000000">?</span><span style="color: #000000">0</span><span style="color: #000000">:(Integer.parseInt(request.getParameter(pageIndexName))&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);&nbsp; //当前页数<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />String&nbsp;sqlCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;count(*)&nbsp;&nbsp;from&nbsp;user_log&nbsp;a&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp; //用于统计总记录数的sql语句<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;select&nbsp;*&nbsp;from&nbsp;(select&nbsp;rownum&nbsp;as&nbsp;rid,&nbsp;t1.*&nbsp;from&nbsp;(select&nbsp;b.pername&nbsp;as&nbsp;pername,to_char(a.operdate,'yyyy-mm-dd&nbsp;hh24:mi:ss')&nbsp;as&nbsp;operdate,</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;decode(a.opertype,'D','删除','M','修改','其他')&nbsp;as&nbsp;opertype,&nbsp;a.hphm&nbsp;as&nbsp;hphm&nbsp;from&nbsp;user_log&nbsp;a,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;(select&nbsp;asuser.userid&nbsp;as&nbsp;userid,nvl(asempmsg.pername,asuser.loginname)&nbsp;as&nbsp;pername&nbsp;from&nbsp;asuser,ASEMPMSG&nbsp;where&nbsp;asuser.perid=ASEMPMSG.perid(+))&nbsp;b</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;where&nbsp;a.userid=b.userid&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;//查询语句</span></div>
<div><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造查询条件<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuffer();<br />
<img id="_930_1025_Open_Image" onclick="this.style.display='none'; document.getElementById('_930_1025_Open_Text').style.display='none'; document.getElementById('_930_1025_Closed_Image').style.display='inline'; document.getElementById('_930_1025_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_930_1025_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_930_1025_Closed_Text').style.display='none'; document.getElementById('_930_1025_Open_Image').style.display='inline'; document.getElementById('_930_1025_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(logQueryForm.getCzrqStart()</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">""</span><span style="color: #000000">.equals(logQueryForm.getCzrqStart()))</span><span id="_930_1025_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_930_1025_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;and&nbsp;a.operdate&nbsp;&gt;&nbsp;to_date('</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">logQueryForm.getCzrqStart()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">','yyyy-mm-dd')</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="_1105_1199_Open_Image" onclick="this.style.display='none'; document.getElementById('_1105_1199_Open_Text').style.display='none'; document.getElementById('_1105_1199_Closed_Image').style.display='inline'; document.getElementById('_1105_1199_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_1105_1199_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1105_1199_Closed_Text').style.display='none'; document.getElementById('_1105_1199_Open_Image').style.display='inline'; document.getElementById('_1105_1199_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(logQueryForm.getCzrqEnd()</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">""</span><span style="color: #000000">.equals(logQueryForm.getCzrqEnd()))</span><span id="_1105_1199_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_1105_1199_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;and&nbsp;a.operdate&nbsp;&lt;=&nbsp;to_date('</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">logQueryForm.getCzrqEnd()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">','yyyy-mm-dd')</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="_1273_1341_Open_Image" onclick="this.style.display='none'; document.getElementById('_1273_1341_Open_Text').style.display='none'; document.getElementById('_1273_1341_Closed_Image').style.display='inline'; document.getElementById('_1273_1341_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_1273_1341_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1273_1341_Closed_Text').style.display='none'; document.getElementById('_1273_1341_Open_Image').style.display='inline'; document.getElementById('_1273_1341_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(logQueryForm.getCzlx()</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">""</span><span style="color: #000000">.equals(logQueryForm.getCzlx()))</span><span id="_1273_1341_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_1273_1341_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;and&nbsp;a.opertype&nbsp;=&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">logQueryForm.getCzlx()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="_1415_1481_Open_Image" onclick="this.style.display='none'; document.getElementById('_1415_1481_Open_Text').style.display='none'; document.getElementById('_1415_1481_Closed_Image').style.display='inline'; document.getElementById('_1415_1481_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_1415_1481_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1415_1481_Closed_Text').style.display='none'; document.getElementById('_1415_1481_Open_Image').style.display='inline'; document.getElementById('_1415_1481_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(logQueryForm.getCzry()</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">""</span><span style="color: #000000">.equals(logQueryForm.getCzry()))</span><span id="_1415_1481_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_1415_1481_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;and&nbsp;a.userid&nbsp;=&nbsp;'</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">logQueryForm.getCzry()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">'</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="_1555_1624_Open_Image" onclick="this.style.display='none'; document.getElementById('_1555_1624_Open_Text').style.display='none'; document.getElementById('_1555_1624_Closed_Image').style.display='inline'; document.getElementById('_1555_1624_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_1555_1624_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1555_1624_Closed_Text').style.display='none'; document.getElementById('_1555_1624_Open_Image').style.display='inline'; document.getElementById('_1555_1624_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlCount&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;sb.toString();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;sb.toString()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;order&nbsp;by&nbsp;a.operdate&nbsp;desc)&nbsp;t1&nbsp;where&nbsp;rownum&lt;=</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;(pageIndex&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pageSize&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;)&nbsp;t2&nbsp;where&nbsp;t2.rid&gt;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;pageIndex&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pageSize;&nbsp; //分页读取语句<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">System.out.println(sb.toString());</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBBean&nbsp;db&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DBBean();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;prep&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img id="_1938_2211_Open_Image" onclick="this.style.display='none'; document.getElementById('_1938_2211_Open_Text').style.display='none'; document.getElementById('_1938_2211_Closed_Image').style.display='inline'; document.getElementById('_1938_2211_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_1938_2211_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1938_2211_Closed_Text').style.display='none'; document.getElementById('_1938_2211_Open_Image').style.display='inline'; document.getElementById('_1938_2211_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span id="_1938_2211_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_1938_2211_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;resultList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;db.getResultList(sql);&nbsp;&nbsp; //将ResultSet保存在List里返回<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">resultList</span><span style="color: #000000">"</span><span style="color: #000000">,resultList);&nbsp; //把结果存入request<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prep&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;db.getConnection().prepareStatement(sqlCount);&nbsp;&nbsp;&nbsp; <br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;prep.executeQuery();<br />
<img id="_2136_2207_Open_Image" onclick="this.style.display='none'; document.getElementById('_2136_2207_Open_Text').style.display='none'; document.getElementById('_2136_2207_Closed_Image').style.display='inline'; document.getElementById('_2136_2207_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_2136_2207_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2136_2207_Closed_Text').style.display='none'; document.getElementById('_2136_2207_Open_Image').style.display='inline'; document.getElementById('_2136_2207_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(rs.next())</span><span id="_2136_2207_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_2136_2207_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">resultSize</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(rs.getInt(</span><span style="color: #000000">1</span><span style="color: #000000">)));&nbsp;&nbsp;&nbsp;&nbsp; //将总记录数保存成Intger实例保存在request中<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="_2234_2263_Open_Image" onclick="this.style.display='none'; document.getElementById('_2234_2263_Open_Text').style.display='none'; document.getElementById('_2234_2263_Closed_Image').style.display='inline'; document.getElementById('_2234_2263_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_2234_2263_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2234_2263_Closed_Text').style.display='none'; document.getElementById('_2234_2263_Open_Image').style.display='inline'; document.getElementById('_2234_2263_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">(Exception&nbsp;ex)</span><span id="_2234_2263_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_2234_2263_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="_2274_2327_Open_Image" onclick="this.style.display='none'; document.getElementById('_2274_2327_Open_Text').style.display='none'; document.getElementById('_2274_2327_Closed_Image').style.display='inline'; document.getElementById('_2274_2327_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_2274_2327_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2274_2327_Closed_Text').style.display='none'; document.getElementById('_2274_2327_Open_Image').style.display='inline'; document.getElementById('_2274_2327_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">finally</span><span id="_2274_2327_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_2274_2327_Open_Text"><span style="color: #000000">{<br />
<img id="_2291_2322_Open_Image" onclick="this.style.display='none'; document.getElementById('_2291_2322_Open_Text').style.display='none'; document.getElementById('_2291_2322_Closed_Image').style.display='inline'; document.getElementById('_2291_2322_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_2291_2322_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2291_2322_Closed_Text').style.display='none'; document.getElementById('_2291_2322_Open_Image').style.display='inline'; document.getElementById('_2291_2322_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(db</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="_2291_2322_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_2291_2322_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.closeConnection();&nbsp;&nbsp;&nbsp; //关闭连接<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
</div>
<p>&nbsp;</p>
<p>其中的页面导航是英文的，只要修改org.displaytag.properties.TableTag.properties配置文件就可以把英文改成中文。同时还可以指定导出文件的类型以及文件名。</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">export.excel</span><span style="color: #000000">=</span><span style="color: #000000">true<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />export.excel.label</span><span style="color: #000000">=</span><span style="color: #000000">&lt;span&nbsp;class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">export&nbsp;excel</span><span style="color: #000000">"</span><span style="color: #000000">&gt;Excel&nbsp;&lt;/span&gt;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />export.excel.include_header</span><span style="color: #000000">=</span><span style="color: #000000">true<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />export.excel.filename</span><span style="color: #000000">=</span><span style="color: #000000">export.xls</span></div>
</div>
<p>如果不指定文件名，在点击导出excel的时候，就会在ie窗口中打开excel文件。很烦人！<br />
指定文件名后就可以选择保存和打开了。</p>
<div align="center"><script type="text/javascript"><!--google_ad_client = "pub-9648238652058580"; google_ad_width="468;google_ad_height" = 60; google_ad_format="468x60_as_rimg" ; google_cpa_choice="CAAQiYaYhAIaCJ2wcuQYTrQ_KOm293M" ; google_ad_channel="" ;//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script></div>
<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1076047</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/145313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2007-09-15 10:32 <a href="http://www.blogjava.net/keweibo/articles/145313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Displaytag1.1支持在外部实现大数据量分页</title><link>http://www.blogjava.net/keweibo/articles/145310.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Sat, 15 Sep 2007 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/145310.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/145310.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/145310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/145310.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/145310.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Displaytag1.1支持在外部实现大数据量分页。主要有两种方式实现：Displaytag 1.1 offers two alternative ways for working with partial lists:     the first one uses the valuelist pattern, and requires that the object tha...&nbsp;&nbsp;<a href='http://www.blogjava.net/keweibo/articles/145310.html'>阅读全文</a><img src ="http://www.blogjava.net/keweibo/aggbug/145310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2007-09-15 10:21 <a href="http://www.blogjava.net/keweibo/articles/145310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Display Tag</title><link>http://www.blogjava.net/keweibo/articles/144578.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Wed, 12 Sep 2007 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/144578.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/144578.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/144578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/144578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/144578.html</trackback:ping><description><![CDATA[用了一段时间的Display Tag，觉得非常好用，可在论坛上发现好像使用这个东东的人挺少的，那偶也来写篇文章。<br />
&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的大小。具体怎么用偶还没研究。</p>
<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=296316</p>
 <img src ="http://www.blogjava.net/keweibo/aggbug/144578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2007-09-12 18:37 <a href="http://www.blogjava.net/keweibo/articles/144578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jstl标签的使用 </title><link>http://www.blogjava.net/keweibo/articles/138225.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Mon, 20 Aug 2007 12:29:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/138225.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/138225.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/138225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/138225.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/138225.html</trackback:ping><description><![CDATA[<p align=center><strong><span>JSTL</span></strong><strong><span>(Java Server Page Standalone Tag Library)</span></strong></p>
<p align=left><span>1</span><span>．<span>servlet</span>的<span>xml</span>配置：在<span>action</span>引用中一定要加上根目录（<span>/project</span></span><span>/servlet/Hello</span><span>）</span></p>
<p align=left><strong><span>&lt;servlet&gt;</span></strong></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;servlet-name&gt;</span>Hello&lt;/servlet-name&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;servlet-class&gt;</span>mypack.Hello&lt;/servlet-class&gt;</span></p>
<p align=left><span>&nbsp;<strong><span>&lt;/servlet&gt;</span></strong></span></p>
<p align=left><span>&nbsp;<strong><span>&lt;servlet-mapping&gt;</span></strong></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;servlet-name&gt;</span>Hello&lt;/servlet-name&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;url-pattern&gt;</span>/servlet/Hello&lt;/url-pattern&gt;</span></p>
<p align=left><span>&nbsp;<strong><span>&lt;/servlet-mapping&gt;</span></strong></span></p>
<p><span><br>2</span><span>．<span>JSP2.0</span>新特性：<span>EL</span>（<span>Expression Language</span>）语言：只能在标签开始和标签结束之间</span></p>
<p align=left><span>Eg:name:${<strong><span>param</span></strong>.name } ${paramValues.habit[0]} ${paramValues.habit[1]} </span></p>
<p align=left><span><span>&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;</span>&lt;%request.setAttribute("title","book"); %&gt;&nbsp;<strong><span>${requestScope.title }</span></strong></span></p>
<p align=left><span><br>3.JSTL(Java Server Page Standalone Tag Library):</span><span>本身就是一种强标记，比<span>JSP</span>动作更强</span></p>
<p align=left><span><br>a.</span><span>一般用途和条件标签：</span></p>
<p align=left><span>1.</span><span>&lt;<strong><span>c:out</span></strong> value="hello" default="ol"&nbsp;escapeXml="false"&gt; body:can not see&lt;/c:out&gt;</span></p>
<p align=left><span>&nbsp;2.&lt;<strong><span>c:set</span></strong>&nbsp;scope="page" value="nihao" var="name1"/&gt;&nbsp;&lt;c:out value="${name1}"/&gt;</span></p>
<p align=left><span>&nbsp;3.&lt;jsp:useBean id="User" class="mypack.User"&gt;&lt;/jsp:useBean&gt;</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;</span>&lt;c:set property="name" target="${User}" value="k" &gt; value is default&lt;/c:set&gt;</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;</span>&lt;c:out value="${User.name}"/&gt;&nbsp;//</span><span>输出<span>k</span></span></p>
<p align=left><span>&nbsp;4.&lt;c:set var="count" value="100" scope="page"/&gt; &lt;<strong><span>c:if</span></strong> test="${count&gt;78}"&gt;ok &lt;/c:if&gt;</span></p>
<p align=left><span>&nbsp;5.&lt;<strong><span>c:remove</span></strong> var="count" scope="page"/&gt;</span></p>
<p align=left><span>&nbsp;6.&lt;<strong><span>c:catch</span></strong> var="e"&gt;&lt;%Integer.parseInt("m");%&gt;&lt;/c:catch&gt; &lt;c:out value="e.message"/&gt;</span></p>
<p align=left><span>6.<strong><span>&lt;c:choose&gt;</span></strong></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;<strong><span>c:when</span></strong> test="${count&lt;=0}"&gt; &lt;font color="bule"&gt; &lt;/c:when&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;<strong><span>c:otherwise</span></strong>&gt; &lt;font color="green"&gt;<span>&nbsp;&nbsp; </span>&lt;/c:otherwise&gt;&nbsp;&lt;/c:choose&gt;<span>&nbsp;&nbsp; </span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>the value count is:&lt;c:out value="${count}"/&gt; </span></p>
<p align=left><span><br><br>b.</span><span>迭代循环标签：<span>&lt;jsp:useBean id="test" class="mypack.User"&gt;&lt;/jsp:useBean&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;% Collection users_c=new ArrayList();</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(int i=0;i&lt;3;i++) { test.setName("foo"+i);&nbsp;users_c.add(test);&nbsp;}</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span>session.setAttribute("attr",users_c);</span></strong> %&gt;//</span><span>只有在一定范围内才能找到</span></p>
<p align=left><span>&nbsp;&lt;c:forEach var="each" items="${attr}"&gt; &lt;c:out value="${each.name}"/&gt;&lt;/c:forEach&gt;</span></p>
<p align=left><span>&lt;<strong><span>c:forEach</span></strong> var="s" begin="50" end="60" step="2"&gt;&lt;c:out value="${s}"/&gt;&lt;/c:forEach&gt;</span></p>
<p align=left><span><br><br>c.URL</span><span>标签：<span>&lt;<strong><span>c:import</span></strong> url="test1.jsp" charEncoding="gb2312"&gt;&lt;/c:import&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp; </span>&lt;<strong><span>c:url </span></strong>value="test2.jsp" var="nx" scope="request"&gt;//url</span><span>重定义</span></p>
<p align=left><span><span>&nbsp;&nbsp; </span>&lt;<strong><span>c:param</span></strong> name="user" value="liming"&gt;&lt;/c:param&gt; &lt;/c:url&gt; &lt;<strong><span>c:redirect</span></strong> url="${nx}"/&gt;</span></p>
<p align=left><span><br><br>d:SQL</span><span>标签：<span>&lt;<strong><span>sql:setDataSource</span></strong> var="db1"<span>&nbsp;&nbsp;&nbsp; </span>driver="com.mysql.jdbc.Driver"</span></span></p>
<p align=left><span>url="jdbc:mysql://localhost:3306/mydb" user="root" password="root" scope="session" /&gt; </span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;<strong><span>sql:query</span></strong> var="query" dataSource="${db1}"<span>&nbsp;&nbsp; </span>sql="SELECT * FROM mytable"/&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;table border="1"&gt;&nbsp;&lt;c:forEach var="row" <strong><span>items</span></strong>="${query.rows}"&gt;//</span><span>要迭代的集合</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;tr&gt;&nbsp;&lt;td&gt;name:&lt;c:out value="${row.name}"/&gt;&lt;/tr&gt;&lt;/c:forEach&gt; &lt;/table&gt;<span>&nbsp;&nbsp; </span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;<strong><span>sql:update</span></strong> dataSource="${db1}" sql="update mytable set age='22' where id=1" var="update1"/&gt;<br><strong><span><br>//</span></strong></span><strong><span>要导入<span>&lt;%@ taglib prefix="sql|c "uri="http://*/sql|core"%&gt;</span></span></strong></p>
 <img src ="http://www.blogjava.net/keweibo/aggbug/138225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">KE</a> 2007-08-20 20:29 <a href="http://www.blogjava.net/keweibo/articles/138225.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>