如何正确使用page—taglib经行正确中文检索分页(同时查询条件任意)

来源:互联网 发布:淘宝商品被投诉假货 编辑:程序博客网 时间:2024/04/29 12:07

平时我们用page—taglib经行分页时,遇到中文分页时老是乱码,有些人说修改它的源码PageTag

final void addParam(String name, String value) {

if (value != null) {
name = java.net.URLEncoder.encode(name,"utf-8");
value = java.net.URLEncoder.encode(value,"utf-8");

但是当点击分页时还是乱码,怎么办??


其实到了这里很简单,当你点击下一页是,它用的是get方式提交要转码,所以需要判断

//pagelib bug 当点击下一页查询时,会乱码,所有此处必须转码
if(getRequest().getParameter("pager.offset") != null){
entName = ChineseUtils.toChinese(entName);
System.out.println("--------------entName-----------------entName"+entName);
}

当点击查询时,经行转码。

另外我的分页参数是任意的,我做了个特殊处理

/**
 * @author Cooly 2013-7-22
 * QueryStringBasesAction.java 统计分析中baseAction
 * 统计分析中将请求参数保存,获得基本静态数据信息
 * Copyright (c) 2013 by SHUNAN.
 * @version 1.0
 */
@SuppressWarnings({"unchecked","serial"})
public class QueryStringBasesAction extends BaseAction {

//将请求参数保存到map中 统计分析中将请求参数保存
protected Map<String, String> queryStringMap = new HashMap<String, String>();


@Override
public void setParameters(Map<String, String[]> map) {
super.setParameters(map);
for(Iterator<String> it = map.keySet().iterator();it.hasNext();){
String key =  it.next();
String[] value = map.get(key);
queryStringMap.put(key, value[0]);//统计分析中对每个请求只对应一个值,所以这里只取 value[0]
}
}
}

这是我保存分页时,条件查询的参数,

下面在action继承上面的action,同时放到request里,前台获取


//保留上次请求路径,和参数,同时替换掉entName参数,防止乱码
this.queryStringMap.put("entName", this.entName);
this.getRequest().setAttribute("queryStringMap", this.queryStringMap);

this.getRequest().setAttribute("requestURL ", this.url);
return "success";


下面是我共用分页,

总记录数:${totalcount}
<pg:pager url="${requestURL }" items="${totalcount}" maxPageItems="10" export="currentPageNumber=pageNumber">  
 <!-- 循环参数列表 -->
  <s:iterator value="#request.queryStringMap" >
  <pg:param name="${ key}" value="${ value}"/>
  </s:iterator>
   <pg:first>  
       <a  href="${pageUrl}" id="firstpageurl" >首页</a>  
   </pg:first>  
   <pg:prev>  
   <a href="${pageUrl}">前页</a>  
   </pg:prev>  
   <pg:pages>  
    <s:if test="#attr.pageNumber==#attr.currentPageNumber">
     <font color="red">${pageNumber }</font>
    </s:if>
    <s:else><a href="${pageUrl}" >${pageNumber}</a></s:else>
   </pg:pages>  
   <pg:next>  
   <a href="${pageUrl}" >后页</a>  
   </pg:next>  
   <pg:last>  
   <a href="${pageUrl}" >尾页</a>  
   </pg:last>  
</pg:pager> 

由于都是后台穿过来的,所有分页页面可以共用,同时查询条件不用再辛苦的写了,同时解决了中文问题