MIS王S

导航

jsp+struts2+spring+mybatis分页样例

分页公共页面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="s" uri="/struts-tags" %>
 4 
 5 <%
 6 String path = request.getContextPath();
 7 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 8 %>
 9 
10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
11 <html>
12     <head>
13         <base href="<%=basePath%>">
14         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
15         <title>分页页面</title>
16     </head>
17     <body>
18         当前第<s:property value="#session.page.pageIndex"/>页 ,
19         共有<s:property value="#session.page.pageTotal"/>页,
20         每页显示<s:property value="#session.page.pageSize"/>条,
21         <s:if test="#session.page.pageIndex > 1">
22             <a href="<%=basePath%><s:property value="actionName"/>?page.pageIndex=1&actionName=<s:property value="actionName"/>">首页</a>
23         </s:if>
24         <s:else>
25             首页
26         </s:else>
27         <s:if test="#session.page.pageIndex > 1">
28             <a href="<%=basePath%><s:property value="actionName"/>?page.pageIndex=<s:property value="#session.page.pageIndex - 1"/>&actionName=<s:property value="actionName"/>">上一页</a>
29         </s:if>
30         <s:else>
31             上一页
32         </s:else>
33         <s:if test="#session.page.pageIndex < #session.page.pageTotal">
34             <a href="<%=basePath%><s:property value="actionName"/>?page.pageIndex=<s:property value="#session.page.pageIndex + 1"/>&actionName=<s:property value="actionName"/>">下一页</a>
35         </s:if>
36         <s:else>
37             下一页
38         </s:else>
39         <s:if test="#session.page.pageIndex < #session.page.pageTotal">
40             <a href="<%=basePath%><s:property value="actionName"/>?page.pageIndex=<s:property value="#session.page.pageTotal"/>&actionName=<s:property value="actionName"/>">尾页</a>
41         </s:if>
42         <s:else>
43             尾页
44         </s:else>
45     </body>
46 </html>

jsp列表页

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <base href="<%=basePath%>">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>教练分页页面</title>
    </head>
    <body>
        <s:include value="../common/navgation.jsp"></s:include>
        <br/><br/><br/><br/><br/><br/><br/><br/>
        <table style="background-color: black;">
            <tr>
                <th>头像</th>
                <th>姓名</th>
                <th>地址</th>
                <th>年龄</th>
            </tr>
            <c:forEach items="${jl }" var="jl">
                <tr>
                    <td>
                        <img alt="头像" src="<%=basePath%>${jl.head}" width="30px" height="30px">
                    </td>
                    <td>${jl.name }</td>
                    <td>${jl.address }</td>
                    <td>${jl.age }</td>
                </tr>
            </c:forEach>
        </table>
        
        <s:include value="../common/page.jsp"></s:include>
    </body>
</html>

Struts2配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>
	<package name="user" namespace="/user" extends="struts-default">
		<action name="jlDetails" class="userAction" method="jlDetailsAction">
			<result name="success">/WEB-INF/user/jlInformetion.jsp</result>
		</action>
		
	</package>
</struts>

 action层代码

package com.cjsf.wfma.action;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.cjsf.wfma.bean.Page;
import com.cjsf.wfma.bean.User;
import com.cjsf.wfma.service.UserService;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author Administrator
 * @category 用户登录控制类
 * @version v1.0
 */
@Controller("userAction")
@Scope("prototype")
public class UserAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private List<User> jl;//教练
	private Page page = new Page();
	private String actionName;//标记jsp分页中在点击上一页下一页首页尾页的时候请求的action是分页的action
	
	@Autowired
	private UserService userService;
	
	
	/**
	 * @category 教练分页
	 * @return 返回成功或失败
	 */
	public String jlDetailsAction(){
		jl = userService.jlDetailsS(page);
		if(jl!=null){
			return "success";
		}else{
			return "error";
		}
	}
	
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public UserService getUserService() {
		return userService;
	}
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
	public List<User> getJl() {
		return jl;
	}
	public void setJl(List<User> jl) {
		this.jl = jl;
	}

	public Page getPage() {
		return page;
	}

	public void setPage(Page page) {
		this.page = page;
	}

	public String getActionName() {
		return actionName;
	}

	public void setActionName(String actionName) {
		this.actionName = actionName;
	}
	
}

  service层

package com.cjsf.wfma.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cjsf.wfma.bean.Page;
import com.cjsf.wfma.bean.User;
import com.cjsf.wfma.dao.UserDao;
import com.cjsf.wfma.service.UserService;
import com.cjsf.wfma.util.SearchPageUtil;
import com.opensymphony.xwork2.ActionContext;

/**
 * @author Administrator
 * @category 用户业务逻辑处理接口
 * @version v1.0
 */
@Service("userService")
public class UserServiceImpl implements UserService {

	@Autowired
	private UserDao userDao;
	private SearchPageUtil spu = new SearchPageUtil();
	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	
	/**
	 * @category 教练分页
	 * @param page分页实体类
	 * @return 返回一个教练数组
	 */
	@Override
	public List<User> jlDetailsS(Page page) {
		page.setRowTotal(userDao.getJLCountD());//获取教练数据总条数
		spu.getDataRows(page);//计算出总页数
		spu.getStartPage(page);//设置起始行
		ActionContext acKC = ActionContext.getContext();
		acKC.getSession().put("page", page);//将分页信息存入 值栈中
		return userDao.jlDetailsD(page);
	}
	
}

  dao层

package com.cjsf.wfma.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.cjsf.wfma.bean.Page;
import com.cjsf.wfma.bean.User;
import com.cjsf.wfma.dao.UserDao;

/**
 * @author Administrator
 * @version 1.0
 * @category用户业务数据处理实现类
 */
@Repository("userDao")
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
	
	@Autowired
	@Override
	public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
		super.setSqlSessionFactory(sqlSessionFactory);
	}
	
	
	/**
	 * @category 教练分页
	 * @param page分页实体类
	 * @return 返回一个教练数组
	 */
	@Override
	public List<User> jlDetailsD(Page page) {
		return this.getSqlSession().selectList("com.cjsf.wfma.bean.mappingxml.UserMapper.jlDetailsD", page);
	}
	/**
	 * @category 查询教练的总数
	 * @return 返回一个整型数字
	 */
	@Override
	public int getJLCountD() {
		return this.getSqlSession().selectOne("com.cjsf.wfma.bean.mappingxml.UserMapper.getJLCountD");
	}
	

}

  user实体类映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cjsf.wfma.bean.mappingxml.UserMapper">
    <select id="getJLCountD" resultType="int">
    	SELECT COUNT(*) FROM user WHERE TYPE='教练'
    </select>
   
    <select id="jlDetailsD" parameterType="com.cjsf.wfma.bean.Page" resultType="com.cjsf.wfma.bean.User">
    	SELECT * FROM USER  WHERE TYPE='教练' LIMIT #{startRow},#{pageSize}
    </select>
    
</mapper>

  user实体类,省略了getter,setter,toString,有参构造 方法

package com.cjsf.wfma.bean;

import java.util.Date;

/**
 * @author Administrator
 * @version v1.0
 * 用户实体类
 */
public class User {
        private int id;//编号
	private String nickname;//昵称
	private String password;//密码
	private String name;//姓名
	private String sex;//性别
	private int age;//年龄
	private Date brithday;//出生日期
	private String address;//住址
	private String tell;//电话
	private String qq;//qq
	private String email;//邮箱
	private String type;//用户类别[管理员|学员|教练]
	private String briefintroduction;//个人简介
	private String head;//头像
	
}

 page实体类,省略了getter,setter,toString,有参构造 方法  

 

package com.cjsf.wfma.bean;
/**
 * @category 分页实体类
 * @author Administrator
 */
public class Page {
	  
    private Integer pageIndex = 1;// 第几页  
    private Integer pageSize = 1;// 每页大小 
    private Integer rowTotal;// 数据总条数
    private Integer pageTotal;// 总共多少页
    private Integer startRow;//起始行
}

  SearchPageUtil分页工具类

package com.cjsf.wfma.util;

import com.cjsf.wfma.bean.Page;

/**
 * @category 分页工具类
 * @author Administrator
 */
public class SearchPageUtil {
	
	/**
	 * @category 计算出总页数
	 * @param page
	 * @return
	 */
	public int getDataRows(Page page){
		int ym = 0;//数据总页码
		if (page.getRowTotal() % page.getPageSize() == 0) {
			ym = page.getRowTotal() / page.getPageSize();
			page.setPageTotal(ym);
        } else {
        	ym = page.getRowTotal() / page.getPageSize() + 1;
			page.setPageTotal(ym);
        }
		return page.getPageTotal();
	}
	
	/**
	 * @category 设置当前行
	 * @param page
	 */
	public void getStartPage(Page page){
		page.setStartRow((page.getPageIndex() - 1) * page.getPageSize());
	}
    
}

  说明:

这个样例中还省略了spring配置文件(这个配置文件一般的都可以,没有特别的配置),另外省略了service,dao层接口文件。

这个样例是我在百度上查阅了一些大神的博客结合自己的项目而来。基本上可以实现分页功能,如有错误,恭请指正,哪位大神有更好的方法,希望可以分享一下。

 

posted on 2017-02-28 11:27  MIS王S  阅读(80)  评论(0)    收藏  举报