發文作者:marky0511 | 六月 3, 2007

DisplayTag 分頁

為了讓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來做資料列表的話,就可以在JSPACTION裡取出四個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();
}

}


回應

  1. 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 也有額外的說明。


發表迴響

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

連結到 %s

分類

Follow

Get every new post delivered to your Inbox.