上次我们完成了信息发布管理模块的分页功能。但是我们还没给其它的模块做分页,所以我们也要去完成其它模块的分页功能。
按照我们给信息发布管理模块编写分页功能的方式去编写,需要大费周章,我们不如把分页功能封装起来,这样这些模块包括以后扩充的模块都能使用分页的功能了。
我们回顾一下我们的InfoAction,关于分页的属性有:
我们没有必要以后的每一个Action都写这三个属性,我们的Action都继承了BaseAction,所以我们把这三个属性放到BaseAction中:
然后Action之前的infoList我们也不需要了(删除这个属性以及get和set方法),因为我们现在只从pageResult中拿数据。
然后我们修改UserAction的Action,将userList删除(删除这个属性以及get和set方法)(删除原因和上面的原因一样),然后改造listUI方法:
需要使用strName来防止用户名查询条件被覆盖的方法有增、删、修方法,可以去对应的方法去修改,这里不再赘述代码。
然后别忘记在user-struts.xml加上list跳转时的参数strName的配置:
然后类中的其他引用userList的报错的地方可以不去用这个对象,直接使用userService.findObjects()来代替。
最后,别忘记把我们user的list.jsp中的数据迭代中的value="userList"改为value="pageResult.items":
接下来roleAction的改造和上面一样,我就不再赘述了,roleAction的listUI改造以后变为:
当然strName也是要加和修改增、删、修方法的。role-struts.xml中list跳转时的参数strName也要配置的。
最后,别忘记把我们role的list.jsp中的数据迭代中的value="roleList"改为value="pageResult.items":
Action全部改造完毕之后,我们要对前端jsp中的分页部分进行抽取:
我们之前的jsp页面分页部分有以下:
我们不需要每一页都去写这些代码,我们可以把上面的代码单独封装到一个jsp文件中,然后每个需要写分页功能的jsp页面都可以去引用它。我们把上面代码封装至/common/pageNavigator.jsp中:
我们把跳转的路径封装在了listUI.jsp的list_url变量中:
var list_url="${basePath}tax/XXX_listUI.action";(xxx是info、user或者role)
顺便把没有搜索功能的添加搜索功能
(<input type="button" class="s_button" value="搜 索" οnclick="doSearch()"/>)
然后我们在listUI.jsp中放置分页代码的位置添加动态包含代码:
这样我们每一个想使用分页功能的模块都可以直接引入这个代码(我们在user、role的listUI.jsp代码中也这么改造)。
这样,我们的“用户管理”、“角色管理”和“信息发布管理”这三个模块都拥有了“搜索”和“分页”功能了。
按照我们给信息发布管理模块编写分页功能的方式去编写,需要大费周章,我们不如把分页功能封装起来,这样这些模块包括以后扩充的模块都能使用分页的功能了。
我们回顾一下我们的InfoAction,关于分页的属性有:
//分页对象
protected PageResult pageResult;
//页号
private int pageNo;
//页大小
private int pageSize;c
我们没有必要以后的每一个Action都写这三个属性,我们的Action都继承了BaseAction,所以我们把这三个属性放到BaseAction中:
package cn.edu.hpu.tax.core.action;
import cn.edu.hpu.tax.core.page.PageResult;
import com.opensymphony.xwork2.ActionSupport;
public abstract class BaseAction extends ActionSupport{
protected String[] selectedRow;
//分页对象
protected PageResult pageResult;
//页号
private int pageNo;
//页大小
private int pageSize;
//默认每页页大小
public static int DEFAULT_PAGE_SIZE=4;
public String[] getSelectedRow() {
return selectedRow;
}
public void setSelectedRow(String[] selectedRow) {
this.selectedRow = selectedRow;
}
public PageResult getPageResult() {
return pageResult;
}
public void setPageResult(PageResult pageResult) {
this.pageResult = pageResult;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
//给的默认的分页大小
if(pageSize < 1) pageSize = DEFAULT_PAGE_SIZE;
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
然后Action之前的infoList我们也不需要了(删除这个属性以及get和set方法),因为我们现在只从pageResult中拿数据。
然后我们修改UserAction的Action,将userList删除(删除这个属性以及get和set方法)(删除原因和上面的原因一样),然后改造listUI方法:
//列表页面
public String listUI() throws Exception{
try {
QueryHelper queryHelper=new QueryHelper(User.class,"u");
if(user != null){
if(StringUtils.isNotBlank(user.getName())){
user.setName(URLDecoder.decode(user.getName(),"utf-8"));
queryHelper.addCondition("u.name like ?", "%"+user.getName()+"%");
}
}
pageResult=userService.getPageResult(queryHelper,getPageNo(),getPageSize());
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return "listUI";
}
还需要加一个strName来防止用户名查询条件被覆盖:
private String strName;
public String getStrName() {
return strName;
}
public void setStrName(String strName) {
this.strName = strName;
}
需要使用strName来防止用户名查询条件被覆盖的方法有增、删、修方法,可以去对应的方法去修改,这里不再赘述代码。
然后别忘记在user-struts.xml加上list跳转时的参数strName的配置:
<result name="list" type="redirectAction">
<param name="actionName">user_listUI</param>
<param name="user.name">${strName}</param>
<param name="encode">true</param><!-- 需要编码 -->
</result>
然后类中的其他引用userList的报错的地方可以不去用这个对象,直接使用userService.findObjects()来代替。
最后,别忘记把我们user的list.jsp中的数据迭代中的value="userList"改为value="pageResult.items":
<s:iterator value="pageResult.items" status="st">
<!--中间代码不再赘述-->
</s:iterator>
接下来roleAction的改造和上面一样,我就不再赘述了,roleAction的listUI改造以后变为:
//列表页面
public String listUI() throws Exception{
try {
//加载权限集合
ActionContext.getContext().getContextMap().put("privilegeMap", Constant.PRIVILEGE_MAP);
QueryHelper queryHelper=new QueryHelper(Role.class,"r");
if(role != null){
if(StringUtils.isNotBlank(role.getName())){
role.setName(URLDecoder.decode(role.getName(),"utf-8"));
queryHelper.addCondition("r.name like ?", "%"+role.getName()+"%");
}
}
pageResult=roleService.getPageResult(queryHelper,getPageNo(),getPageSize());
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return "listUI";
}
当然strName也是要加和修改增、删、修方法的。role-struts.xml中list跳转时的参数strName也要配置的。
最后,别忘记把我们role的list.jsp中的数据迭代中的value="roleList"改为value="pageResult.items":
Action全部改造完毕之后,我们要对前端jsp中的分页部分进行抽取:
我们之前的jsp页面分页部分有以下:
<div class="c_pate" style="margin-top: 5px;">
<!-- 如果页数为空不显示分页选项 -->
<s:if test="pageResult.totalCount > 0">
<table width="100%" class="pageDown" border="0" cellspacing="0"
cellpadding="0">
<tr>
<td align="right">
总共<s:property value="pageResult.totalCount"/>条记录,当前第 <s:property value="pageResult.pageNo"/> 页,
共 <s:property value="pageResult.totalPageCount"/> 页
<!-- 非第一页才有“上一页”选项 -->
<s:if test="pageResult.pageNo>1">
<a href="javascript:doGoPage(<s:property value='pageResult.pageNo-1'/>)">上一页</a>
</s:if>
<!-- 非最后一页才有“下一页”选项 -->
<s:if test="pageResult.pageNo < pageResult.totalPageCount">
<a href="javascript:doGoPage(<s:property value='pageResult.pageNo+1'/>)">下一页</a>
</s:if>
到 <input id="pageNo" name="pageNo" type="text" style="width: 30px;" οnkeypress="if(event.keyCode == 13){doGoPage(this.value);}" min="1"
max="" value="<s:property value="pageResult.pageNo"/>" />
</td>
</tr>
</table>
</s:if><s:else>暂无数据!</s:else>
</div>
<script type="text/javascript">
//翻页方法
function doGoPage(pageNo){
document.getElementById("pageNo").value = pageNo;
document.forms[0].action="${basePath}tax/info_listUI.action";
document.forms[0].submit();
}
</script>
</div>
我们不需要每一页都去写这些代码,我们可以把上面的代码单独封装到一个jsp文件中,然后每个需要写分页功能的jsp页面都可以去引用它。我们把上面代码封装至/common/pageNavigator.jsp中:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<div class="c_pate" style="margin-top: 5px;">
<!-- 如果页数为空不显示分页选项 -->
<s:if test="pageResult.totalCount > 0">
<table width="100%" class="pageDown" border="0" cellspacing="0"
cellpadding="0">
<tr>
<td align="right">
总共<s:property value="pageResult.totalCount"/>条记录,当前第 <s:property value="pageResult.pageNo"/> 页,
共 <s:property value="pageResult.totalPageCount"/> 页
<!-- 非第一页才有“上一页”选项 -->
<s:if test="pageResult.pageNo>1">
<a href="javascript:doGoPage(<s:property value='pageResult.pageNo-1'/>)">上一页</a>
</s:if>
<!-- 非最后一页才有“下一页”选项 -->
<s:if test="pageResult.pageNo < pageResult.totalPageCount">
<a href="javascript:doGoPage(<s:property value='pageResult.pageNo+1'/>)">下一页</a>
</s:if>
到 <input id="pageNo" name="pageNo" type="text" style="width: 30px;" οnkeypress="if(event.keyCode == 13){doGoPage(this.value);}" min="1"
max="" value="<s:property value="pageResult.pageNo"/>" />
</td>
</tr>
</table>
</s:if><s:else>暂无数据!</s:else>
</div>
<script type="text/javascript">
//翻页方法
function doGoPage(pageNo){
document.getElementById("pageNo").value = pageNo;
document.forms[0].action=list_url;
document.forms[0].submit();
}
</script>
我们把跳转的路径封装在了listUI.jsp的list_url变量中:
var list_url="${basePath}tax/XXX_listUI.action";(xxx是info、user或者role)
顺便把没有搜索功能的添加搜索功能
(<input type="button" class="s_button" value="搜 索" οnclick="doSearch()"/>)
function doSearch(){
//重置页号
$("#pageNo").val(1);
document.forms[0].action = list_url;
document.forms[0].submit();
}
然后我们在listUI.jsp中放置分页代码的位置添加动态包含代码:
<jsp:include page="/common/pageNavigator.jsp"></jsp:include>
这样我们每一个想使用分页功能的模块都可以直接引入这个代码(我们在user、role的listUI.jsp代码中也这么改造)。
这样,我们的“用户管理”、“角色管理”和“信息发布管理”这三个模块都拥有了“搜索”和“分页”功能了。
工程代码:HpuTax2.0.zip
转载请注明出处:http://blog.csdn.net/acmman/article/details/49977021