问题描述:分页查询带条件时,当单击超链接比如下一页,上一页后查询的条件丢失,于是使用了url传参的方式。感觉这个方式比较简单。当然在网上看到还有还有get方式设置url,和post设置隐藏标签的方式,感觉不适用,就没用这个。
然后在利用url传参时遇到了url传递中文参数非法问题
**解决方案
**方案一
修改tomcat的server.xml****
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
修改为 <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
**方案二,推荐
将要传递的参数加密后再传过去**
nameUrl=URLEncoder.encode(book.getName(),"UTF-8");
request.put("nameUrl",nameurl);
jsp页面:
<a href="queryBook.action?currentPage=<s:property value="page.currentPage+1"/>&name=<s:property value="#request.nameUrl"/>">下一页</a>
这样防止了参数解析异常,也提高了信息的安全性,比如在地址栏中看到的是经过处理后的字符串,不过还是可以解码哈
**方案三
使用url标签生成Url**
<s:url value="queryBook.action" id="u1">
<s:param name="currentPage" value="page.currentPage+1"/>
<s:param name="name" value="#session.name"/>
</s:url>
<a href="%{#u1}">下一页</a>
具体的分页实现具体的可以看我的gitHub:
https://github.com/flower-you/SSH/blob/SpringHibernate/BookShop_sh/src/main/java/xaut/wjh/dao/BaseDaoImpl.java
一个很好用的分页公式
//根据记录数计算总页数
int totalPages=(totalRecords+page.getPageSize()-1)/page.getPageSize();//例如:pageSize为5, (21+4)/5=5,(24+4)/5=5;(20+4)/5=4,(25+4)/5=5