為了讓DisplayTag 不讓其他動作影響到原來資料的所在頁數,簡單弄了一個FILTER來處理 ~
Display Tag的 LIVE DEMO 在 http://displaytag.homeip.net/displaytag-examples-1.1/
功能:
1.可以記住顯示頁面的頁數
2.可以記住顯示列表中的依那個欄位的排列
3.可以記住顯示列表中依那個欄位遞增或遞減的順序
4.可以增進顧客的信心
5.可以讓顧客不再挑剔
6.可以讓家庭更加幸福美滿 ~
7…..族繁不及備載
用法:
1.將下面的CODE貼到WEB.xml (要放在 <servlet></servlet>之前)
<filter>
<filter-name>DisplayTagFilter</filter-name>
<filter-class>tw.gov.sipa.ewt.comm.DisplayTagFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DisplayTagFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.如果有用DisplayTag來做資料列表的話,就可以在JSP或ACTION裡取出四個SESSION值
session.getAttribute(“displaytag_page”) ==> 最後一次用displayTag做列表時的頁數
session.getAttribute(“displaytag_sort”) ==>最後一次用displayTag做列表時是針對那一欄位的排列
session.getAttribute(“displaytag_order”) ==>最後一次用displayTag做列表時的針對那一欄位的排列是遞增或遞減
session.getAttribute(“displaytag_all”) ==>懶人專用,如果不想個別取出以上三個參數的話,就用這個吧~~~
其他就是對這些參數的應用囉 ~~~~
DisplayTagFilter 的程式如後 ~
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DisplayTagFilter implements Filter {
private FilterConfig filterConfig;
private static Pattern extractPagePattern = Pattern.compile(“(?sim)(d-\\d+-p=\\d+)”);
private static Pattern extractSortPattern = Pattern.compile(“(?sim)(d-\\d+-s=\\d+)”);
private static Pattern extractOrderPattern = Pattern.compile(“(?sim)(d-\\d+-o=\\d+)”);
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
if (“GET”.equals(request.getMethod()) && (null != request.getQueryString() && request.getQueryString().length()>0)) {
final String queryString = request.getQueryString();
String kind1=”page”;
String kind2=”sort”;
String kind3=”order”;
String pageQueryString = extractValue(queryString,kind1);
String sortQueryString = extractValue(queryString,kind2);
String orderQueryString = extractValue(queryString,kind3);
if(pageQueryString!=null&&(!pageQueryString.equals(“”))) {
pageQueryString=”&”+pageQueryString;
request.getSession().setAttribute(“displaytag_page”,pageQueryString);
request.getSession().setAttribute(“displaytag_all”,pageQueryString+sortQueryString+orderQueryString);
}
if(sortQueryString!=null&&(!sortQueryString.equals(“”))) {
sortQueryString=”&”+sortQueryString;
request.getSession().setAttribute(“displaytag_sort”,sortQueryString);
request.getSession().setAttribute(“displaytag_all”,pageQueryString+sortQueryString+orderQueryString);
}
if(orderQueryString!=null&&(!orderQueryString.equals(“”))) {
orderQueryString=”&”+orderQueryString;
request.getSession().setAttribute(“displaytag_order”,orderQueryString);
request.getSession().setAttribute(“displaytag_all”,pageQueryString+sortQueryString+orderQueryString);
}
}
chain.doFilter(req, res);
}
// Clean up resources
public void destroy() {
}
public static String extractValue(String queryString,String kind) {
if ((null == queryString) || (null==kind) ) {
return null;
}
Matcher m=null;
if(kind.equals(“page”)){
m= extractPagePattern.matcher(queryString);
}else if(kind.equals(“sort”)){
m= extractSortPattern.matcher(queryString);
}else if(kind.equals(“order”)){
m= extractOrderPattern.matcher(queryString);
}
StringBuilder ret = new StringBuilder();
int i=0;
for (;m.find();i++) {
if (i > 0) {
ret.append(“&”);
}
ret.append(m.group());
}
if (i==0) {
return “”;
}
return ret.toString();
}
}
hi,Alex:
displaytag 的分頁範例在它的官網
http://displaytag.homeip.net/displaytag-examples-1.1/example-paging.jsp
基本上就是在 display:table 裡加一個元素 pagesize, 如下:
另外在 http://displaytag.sourceforge.net/11/tut_externalSortAndPage.html 也有額外的說明。
By: Alex on 八月 14, 2008
at 5:23 下午