Posted on 2008-11-30 15:47
Shuffy 閱讀(4892)
評論(0) 編輯 收藏 引用 所屬分類:
Java
[摘自]http://www.blogjava.net/huhu/archive/2005/06/07/5669.html
1.表格的顯示格式,在css中定義;
css
Property |
Default |
Valid Values |
Description |
Can be set using file/setProperty |
css.tr.even |
even |
any valid css class name |
css class automatically added to even rows |
yes/yes |
css.tr.odd |
odd |
any valid css class name |
css class automatically added to odd rows |
yes/yes |
css.th.sorted |
sorted |
any valid css class name |
css class automatically added to the header of sorted columns |
yes/yes |
css.th.ascending |
order1 |
any valid css class name |
css class automatically added to the header of a column sorted is ascending order |
yes/yes |
css.th.descending |
order2 |
any valid css class name |
css class automatically added to the header of a column sorted is descending order |
yes/yes |
css.table |
none |
any valid css class name |
css class automatically added to the main table tag |
yes/yes |
css.th.sortable |
none |
any valid css class name |
css class automatically added to any sortable column |
yes/yes |
2.修改classes/org/displaytag/properties/TableTag.properties,使其符合自己的要求.
basic.empty.showtable=false
basic.show.header=true

# page | list
sort.amount=page

export.amount=list
export.decorated=true

paging.banner.group_size=8
paging.banner.placement=top


css.tr.even=even
css.tr.odd=odd
css.th.sorted=sorted
css.th.ascending=order1
css.th.descending=order2
css.table=
css.th.sortable=sortable

# factory classes for extensions
factory.requestHelper=org.displaytag.util.DefaultRequestHelperFactory

# locale provider (Jstl provider by default)
locale.provider=org.displaytag.localization.I18nJstlAdapter

# locale.resolver (nothing by default, simply use locale from request)
#locale.resolver=

export.types=csv excel xml pdf

export.csv.class=org.displaytag.export.CsvView
export.excel.class=org.displaytag.export.ExcelView
export.xml.class=org.displaytag.export.XmlView
export.pdf.class=org.displaytag.export.PdfView

export.csv=true
export.csv.label=<span class="export csv">CSV </span>
export.csv.include_header=false
export.csv.filename=

export.excel=true
export.excel.label=<span class="export excel">Excel </span>
export.excel.include_header=true
export.excel.filename=

export.xml=true
export.xml.label=<span class="export xml">XML </span>
export.xml.filename=

export.pdf=false
export.pdf.label=<span class="export pdf">PDF </span>
export.pdf.include_header=true
export.pdf.filename=


# messages

basic.msg.empty_list=<center>對不起,沒有符合條件的記錄</center>
basic.msg.empty_list_row=<tr class="empty"><td colspan="{0}">Nothing found to display.</td></tr>
error.msg.invalid_page=invalid page


export.banner=<div class="exportlinks">Export options:
{0}</div>
export.banner.sepchar= |

paging.banner.item_name=記錄
paging.banner.items_name=記錄


paging.banner.no_items_found=<span class="pagebanner">沒有任何
{0} .</span>

paging.banner.one_item_found=<span class="pagebanner">搜索到1條
{0} .</span>

paging.banner.all_items_found=<span class="pagebanner">搜索到<b>
{0}</b>條
{1}, 當前顯示全部
{2}.</span>

paging.banner.some_items_found=<span class="pagebanner">搜索到<b>
{0}</b>條
{1} , 當前顯示<b>
{2}</b> to <b>
{3}</b>.</span>


paging.banner.full=<span class="pagelinks">[<a href="{1}">首頁</a>/<a href="{2}">上一頁</a>]
{0} [<a href="{3}">下一頁</a>/<a href="{4}">末頁</a>]</span>

paging.banner.first=<span class="pagelinks">[首頁/上一頁]
{0} [<a href="{3}">下一頁</a>/<a href="{4}">末頁</a>]</span>

paging.banner.last=<span class="pagelinks">[<a href="{1}">首頁</a>/<a href="{2}">上一頁</a>]
{0} [下一頁/末頁]</span>

paging.banner.onepage=<span class="pagelinks">
{0}</span>


paging.banner.page.selected=<strong>
{0}</strong>

paging.banner.page.link=<a href="{1}" title="Go to page {0}">
{0}</a>
paging.banner.page.separator=,

# unused

save.excel.banner=<a href="{0}" rel="external">save (
{1} bytes)</a>
save.excel.filename=export.xls




詳情
http://displaytag.sourceforge.net/configuration.html 3.如果TableTag.properties中的相關項包含中文則在web頁上會出現亂碼,解決方法:下載源碼
修改 org.displaytag.properties.TableProperties.java ,把
private String getProperty(String key)

{
return this.properties.getProperty(key);
}

改成
private String getProperty(String key)

{
String s = null;

try
{
s = new String(this.properties.getProperty(key).getBytes("8859_1"), "GBK");

}catch(Exception e)
{
s = null;
}
return s;
}

4.確保export正確的方法是在web.xml中配置filter:
<filter>
<filter-name>ResponseOverrideFilter</filter-name>
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

詳傾參見
http://displaytag.sourceforge.net/export.html 慎用這個filter,尤其是使用tomcat做服務器的朋友,它會使本來就存在的亂碼問題更加雜亂,除非改改源碼.
5.在jstl中獲得數據的方法:
<sql:query var="query" dataSource="${bookdev}">
select * from ebook
</sql:query>

<display-el:table name="pageScope.query.rows" />

用<display-el:table name="${query.rows}" />好像不行;
6.要在外部引用數據,必須在display:table中定義一個id
<display-el:table name="pageScope.query.rows" id="item" >
<display-el:column property="title" title="題名" group="1" sortable="true" headerClass="sortable"/>
<display-el:column property="creator" title="作者" group="2" sortable="true" headerClass="sortable"/>
<display-el:column property="format" title="格式"/>
<display-el:column title="刪除"><a href="delete.jsp?id=${item.Id}" target="_blank">刪除</a></display-el:column>
</display-el:table>


7.問題:如果檢索數據庫帶有中文的字段,在翻頁時就查不到記錄了?
這個問題著實把我嚇了一大條,因為工程馬上就要完了,要是它出了問題,那.....
好在displaytag比較成熟,用的人比較多,早就有人提出這個問題了,在網上查了一下,原來又是一個編碼的問題:
"DisplayTag的默認的URL默認為上一次的URL,如果上一次的URL包含中文的話,則會被進行URLEncode,所以在翻頁的時候,又會把進行了URLEncode后的數據再次進行URLEncode,所以翻頁就沒有數據,因為這部分功能被封裝在DisplayTag中"
也提出了解決辦法:在Tomcat的server.xml的Connector部分添加URIEncoding="GBK",
我試了,但是好像不管用,不知道是不是版本不同的緣故,我用的是jakarta-tomcat-5.0.27,應該是比較新的.
考慮到Tomcat5中對Post和Get請求不再采用相同的處理策略,
我把查詢表單的form method 由原來的post改為get,翻頁就沒有問題了,不過這個方法好像蹩腳了點,只能暫時這樣了.
在后來的實踐中我才發現原來是配置了filter的緣故(見4.確保export正確的方法是在web.xml中配置filter),這個filter打亂了正常的編碼.
下面是我的一些測試: (配置了export的filter后)
send.jsp:
<form action="receive.jsp?cs=1" method="POST">
<input name="key" type="text" value="中文" />
<input name="sb" value="submit" type="submit"/>
</form>
receive.jsp:cs=${param.cs};key=${param.key}
結果:cs=1,但key=????即使前面用了<%request.setCharacterEncoding("GBK"); %>也不行
只有用<% String key = new String(request.getParameter("key").getBytes("ISO-8859-1"));out.println(key);%>或類似的編碼處理才能得到正確結果.
將send.jsp的form method改為get
結果:cs的值為null,key=中文
8.相關資源:
http://www.theserverside.com/news/thread.tss?thread_id=21861