displaytag應用小結

displaytag 是一個不錯的表格標籤,可以很方便的取數據放在一個表格裏面,支持頁面分頁
使用總結:
1配置:
導出excel,pdf,xml,cvs文件配置

<filter-name>ResponseOverrideFilter</filter-name>
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

2
Struts2傳到頁面的是一個List,這時在頁面上的標籤可用寫成:


<display:table requestURI="/user/index"
name="listTablePage"
id ="element"
export="true"
class="isis"
defaultorder="descending"
size="resultSize"
pagesize="2"
partialList="true"
>
<display:caption>人員信息</display:caption>
<display:column property="userId" title="userId" sortable="true"/>
<display:column property="userName" title="userName" sortable="true"/>
<display:column property="userPwd" title="userPwd" sortable="true"/>
<display:column property="orgId" title="orgId" sortable="true"/>
<display:column property="userType" title="userType" sortable="true"/>
<display:column property="userReal" title="userReal" sortable="true"/>
</display:table>

listTablePage:從Action頁面傳的List。resultSize是從數據庫取得的總數。
3
數據庫分頁。
displaytag可用支持數據庫分頁,這樣可用處理由於每次取得的是大量數據導致的服務器宕機等問題。
解決辦法是在Action頁面添加如下內容:


public String qryList(){
int pageSize = 2 ; //每頁顯示的條數
resultSize = dataBaseServices.qryTableCount();
HttpServletRequest request = ServletActionContext.getRequest();
String pageIndexName = new org.displaytag.util.ParamEncoder("element").encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE); // 頁數的參數名
int pageIndex = GenericValidator.isBlankOrNull(request.getParameter(pageIndexName))?0:(Integer.parseInt(request.getParameter(pageIndexName))-1);//當前頁數
int start = pageIndex * pageSize;
int end = (pageIndex + 1 ) * pageSize;
listTablePage = dataBaseServices.qryTablePage(start, end);
return SUCCESS;
}

GenericValidator類導入的是
import org.apache.commons.validator.GenericValidator;
commons-validator中。
element是標籤中的Id,通過id取得的是翻頁的頁數,據此來分頁。

4
如果要支持中文分頁,必須配置如下:
在classpath裏面配置一個displaytag_zh_CN.properties文件。修改裏面的內容如下
找到# messages,修改成漢字。

# messages

basic.msg.empty_list=暫無記錄
basic.msg.empty_list_row=<tr class="empty"><td colspan="0">暫無記錄</td></tr></tr>
export.banner=<div class="exportlinks">導出選項:{0}</div>
paging.banner.no_items_found=
paging.banner.one_item_found=<span class="pagebanner">共有1條{0}記錄</span>
paging.banner.all_items_found=<span class="pagebanner">共有{0}條{1}記錄,顯示所有{2}記錄</span>
paging.banner.some_items_found=<span class="pagebanner">共有{0}條{1}記錄,當前顯示從第{2}條至第{3}條</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.page.link=<a href="{1}" title="轉到第{0}頁">{0}</a>
paging.banner.page.separator=,

至於displaytag_zh_CN.properties的內容可以從displaytag\target\classes\org\displaytag\properties裏面解壓出來重命名即可。

當然,displaytag對中文支持不好是公認的,原因是編碼格式不對,可以通過修改源碼來解決。
用svn從網上down了個1.2版本的。用maven轉換成eclipse可以導入的項目,機子上必須裝Maven才行。具體如何裝,可以google之。
轉換項目:在maven中敲命令進入到displaytag的根目錄,執行mvn eclipse:eclipse 執行成功後導入eclipse即可。
修改源碼:
找到

private String getProperty(String key)

修改成

private String getProperty(String key)
{
String val = this.properties.getProperty(key);
if (val != null){
try {
val = new String(val.getBytes("ISO8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UnsupportedEncodingException occured");
}
}

return val;
}

即可。最後用eclipse打包放到項目中,重啓Tomcat即可完美的顯示中文!
至此,displaytag應用結束。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章