获取用户信息并分页显示
UserInfo.java
package cn.ict.mp.bean; public class UserInfo { private Long id; private String userId; private String userName; private Integer type; private String email; private String client = "AndroidpnClient"; private String clientIp = "10.21.1.55"; private String createddate; private Integer appType; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getClient() { return client; } public void setClient(String client) { this.client = client; } public String getClientIp() { return clientIp; } public void setClientIp(String clientIp) { this.clientIp = clientIp; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Integer getAppType() { return appType; } public void setAppType(Integer appType) { this.appType = appType; } public String getCreateddate() { return createddate; } public void setCreateddate(String createddate) { this.createddate = createddate; } }
UserInfo.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.ict.mp.bean"> <class name="UserInfo" table="apn_user" lazy="false"> <id name="id" column="id" type="long"> <generator class="identity" /> </id> <property name="userId" type="string"> <column name="username" sql-type="varchar" /> </property> <property name="userName" type="string"> <column name="name" sql-type="varchar" /> </property> <property name="type" type="integer"> <column name="type" sql-type="int" /> </property> <property name="email" type="string"> <column name="email" sql-type="varchar" /> </property> <property name="createddate" type="string"> <column name="created_date" sql-type="datetime" /> </property> <property name="appType" type="integer"> <column name="apptype" sql-type="int" /> </property> </class> </hibernate-mapping>
UserInfoDaoImp.java
package cn.ict.mp.dao.imp; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateTemplate; import cn.ict.mp.bean.UserInfo; import cn.ict.mp.dao.UserInfoDao; public class UserInfoDaoImp implements UserInfoDao { private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } /** * get the list of current page's user information * @param String hql * @param Integer pageNo * @param Integer pageSize * @return List<UserInfo> */ @SuppressWarnings("unchecked") @Override public List<UserInfo> findUserInfo(String hql,Integer pageNo, Integer pageSize) { // TODO Auto-generated method stub List<UserInfo> userList = new ArrayList<UserInfo>(); Session s = hibernateTemplate.getSessionFactory().openSession(); Query query = s.createQuery(hql); //设置当前页显示的第一条记录 query.setFirstResult((pageNo - 1) * pageSize); //设置每页最多显示记录条数 query.setMaxResults(pageSize); userList = query.list(); s.close(); return userList; } /** * get the size of user list * @param String hql * @return Integer */ @SuppressWarnings("unchecked") @Override public Integer findUserListSize(String hql) { // TODO Auto-generated method stub List<UserInfo> userList = new ArrayList<UserInfo>(); Session s = hibernateTemplate.getSessionFactory().openSession(); Query query = s.createQuery(hql); userList = query.list(); Integer totalSize = userList.size(); s.close(); return totalSize; } }
applicationContext-beans.xml
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.generate_statistics">true</prop> <prop key="hibernate.connection.release_mode">auto</prop> <prop key="hibernate.autoReconnect">true</prop> <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> </props> </property> <!-- 配置映射文件 --> <property name="mappingResources"> <list> <value>cn/ict/mp/bean/Login.hbm.xml</value> <value>cn/ict/mp/bean/UserInfo.hbm.xml</value> </list> </property> </bean> <!-- 2把Session工厂注入给hibernateTemplate --> <!-- 解释一下hibernateTemplate:hibernateTemplate提供了很多方便的方法,在执行时自动建立 HibernateCallback 对象,例如:load()、get()、save、delete()等方法。 --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 3创建hibernate的事务管理器 Spring AOP 注入sessionFactory --> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 4配置通知 将该通知关联到hibernate事务管理器 --> <tx:advice id="advice" transaction-manager="txManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" /> <tx:method name="find*" propagation="REQUIRED" isolation="DEFAULT" read-only="true" /> <tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" /> <tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" /> <tx:method name="*" read-only="true" /> </tx:attributes> </tx:advice> <!-- 5配置切入点Spring AOP,将切入点和通知关联起来 --> <aop:config> <aop:pointcut id="perform" expression="execution(* cn.ict.mp.dao..*.*(..))" /> <aop:advisor advice-ref="advice" pointcut-ref="perform" /> </aop:config> <!-- 6配置dao层 --> <bean id="loginDao" class="cn.ict.mp.dao.imp.LoginDaoImp"> <property name="hibernateTemplate" ref="hibernateTemplate" /> </bean> <bean id="userInfoDao" class="cn.ict.mp.dao.imp.UserInfoDaoImp"> <property name="hibernateTemplate" ref="hibernateTemplate" /> </bean>
DataManage.java
package cn.ict.mp.service; import java.util.ArrayList; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.ict.mp.bean.Login; import cn.ict.mp.bean.UserInfo; import cn.ict.mp.dao.LoginDao; import cn.ict.mp.dao.UserInfoDao; public class DataManage { private static ApplicationContext instance = null; /** * new a XmlApplicationContext object and make it be singleton * * @return instance */ private static ApplicationContext getXML() { if (instance == null) { instance = new ClassPathXmlApplicationContext( "applicationContext-beans.xml"); } return instance; } /** * get the list of the current page's user information * @param pageNo * @param pageSize * @return List<UserInfo> */ public static List<UserInfo> getUserList(Integer pageNo, Integer pageSize) { List<UserInfo> list = new ArrayList<UserInfo>(); ApplicationContext actx = getXML(); UserInfoDao ud = (UserInfoDao) actx.getBean("userInfoDao"); String query = "from UserInfo u order by u.id desc"; list = ud.findUserInfo(query, pageNo, pageSize); return list; } /** * get the total size of user list * @return Integer */ public static Integer getUserListSize() { ApplicationContext actx = getXML(); UserInfoDao ud = (UserInfoDao) actx.getBean("userInfoDao"); String query = "from UserInfo u order by u.id desc"; Integer total = ud.findUserListSize(query); return total; } /** * get the list of the login information * * @return List<UserInfo> */ public static List<Login> getLoginList() { List<Login> list = new ArrayList<Login>(); ApplicationContext actx = getXML(); LoginDao ld = (LoginDao) actx.getBean("loginDao"); String query = "from Login l order by l.id desc"; list = ld.findLoginList(query); return list; } /** * judge the username and password is valid or not * * @return String */ public static String isValid(String userName, String password) { //flag=2表示用户名不存在 String flag = "2"; List<Login> loginList = getLoginList(); //flag = 1表示用户名或密码为空 if(userName == null||password == null||userName.equals("")||password.equals("")) { flag = "1"; } else { for(int i = 0;i < loginList.size();i++) { Login l = loginList.get(i); //若用户输入的用户名存在,再判断输入的密码是否与该用户名匹配 if(userName.equals(l.getUserName())) { if(password.equals(l.getPassword())){ //flag = 0表示用户名和密码匹配 flag = "0"; } else{ //flag = 3表示用户名正确,但和密码不匹配 flag = "3"; } break; } } } return flag; } }
ActionUserList.java
package cn.ict.mp.webservice; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.struts2.ServletActionContext; import cn.ict.mp.bean.UserInfo; import cn.ict.mp.service.DataManage; import com.opensymphony.xwork2.ActionSupport; public class ActionUserList extends ActionSupport { /** * */ private static final long serialVersionUID = -6652169340293756648L; private Map<String, Object> dataMap = new HashMap<String, Object>(); public Map<String, Object> getDataMap() { return dataMap; } private Integer pageNo; private Integer totalSize; private Integer totalPage; private Integer pageSize = 5; public Integer getTotalPage() { return totalPage; } public Integer getPageNo() { return pageNo; } public void setPageNo(Integer pageNo) { this.pageNo = pageNo; } public String execute() throws Exception { /** * 定义action返回格式 */ ServletActionContext.getResponse().setContentType("application/json;charset=UTF-8"); ServletActionContext.getResponse().setCharacterEncoding("UTF-8"); //分页显示用户信息列表 List<UserInfo> dataList = DataManage.getUserList(pageNo, pageSize); totalSize = DataManage.getUserListSize(); //总页数向上取整 totalPage = (int)Math.ceil((double)totalSize/pageSize); this.dataMap.put("userList", dataList); return SUCCESS; } }
user.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="resources/css/user.css" /> <title>用户信息列表</title> </head> <body> <div class="pages"> <div class="header"> <div id="title"></div> <div class="mes-1"></div> <!-- 点击“推送消息”图标时跳转至推送消息页面 --> <div><a href = "http://localhost:8082/Message/sendMessageindex" class="mes-2"></a></div> <div class="mes-3"></div> <div class="mes-4"></div> <div class="img-h"></div> </div> <div id="userlist-t"> <div id="state"></div> <div id="userID"></div> <div id="name"></div> <div id="posi"></div> <div id="email"></div> <div id="client"></div> <div id="ip"></div> <div id="time"></div> </div> <div id="userlist-b"></div> <table border="1" width="50%" cellpadding="0" cellspacing="0" style="margin:10% 0 0 20%"> <tr style="background-color: yellow"> <td>appType</td> <td>userId</td> <td>userName</td> <td>type</td> <td>email</td> <td>client</td> <td>clientIp</td> <td>createddate</td> </tr> <!-- 遍历userlist获取当前页用户信息列表 (其中dataMap是ActionUserList返回的HashMap对象)--> <s:iterator value="dataMap" id="column"> <s:set var="total" name="total" value="#column.value.size"/> <s:iterator value="#column.value" id="col" status="st"> <tr> <s:if test="#st.first"></s:if> <td><s:property value="appType"/></td> <td><s:property value="userId"/></td> <td><s:property value="userName"/></td> <td><s:property value="type"/></td> <td><s:property value="email"/></td> <td><s:property value="client"/></td> <td><s:property value="clientIp"/></td> <td><s:property value="createddate"/></td> </tr> </s:iterator> </s:iterator> </table> <!-- 页码跳转实现 --> <script type="text/javascript"> //用户信息总页数 var size=parseInt(<s:property value="totalPage"/>); //第一页 function goFirst(){ goPage(1); } //上一页 function goPrevious(){ goPage(parseInt(document.all.item("pagenumber").value)-1); } //下一页 function goNext(){ goPage(parseInt(document.all.item("pagenumber").value)+1); } //最后一页 function goLast(){ goPage(size); } //进入页号为pageNumber的页面 function goPage(pagenumber){ if(pagenumber<1) {alert("到了首页");return;} if(pagenumber>size) {alert("到了最后一页");return;} window.location.href="http://localhost:8082/Message/userList?pageNo="+pagenumber; } </script> <!-- 这里设置一个隐藏标签,其值为“当前页数 ”--> <input type="hidden" name="pagenumber" value="<s:property value="pageNo"/>"/> <!-- 页码跳转链接 --> <div class="page"> <a href="javascript:goFirst()">第一页</a> <a href="javascript:goPrevious()">上一页</a> 第<s:property value="pageNo"/>页 <a href="javascript:goNext()">下一页</a> <a href="javascript:goLast()">最后一页</a> </div> <div id="foot"> 联系我们: 010-62600237@@liangchen@ict.ac.cn </div> </div> </body> </html>
struts.xml
<action name="userList" class="cn.ict.mp.webservice.ActionUserList" method="execute"> <result name="success">/user.jsp</result> </action>
相关推荐
本示例主要讲解如何利用List接口的获取子List方法来实现对List的分页功能。这个过程涉及到Java集合框架的理解、数据范围的计算以及如何构建分页模型。 首先,我们需要理解Java中的List接口。List是Java集合框架的一...
html前端获取后端js的数据,实现到html表格,并且实现表格分页显示,分页显示原理是要显示那一页数据就从后端获取需要显示页的数据,不会一次性获取全部数据,减小流前端的压力。后端使用js+express,读取csv文件...
"假分页"(也称为虚拟分页)是一种优化策略,它并不真正地从数据库或其他数据源获取每一页的数据,而是将整个数据集一次性加载到内存中,然后在客户端进行分页操作。这种方法在数据量较小且可以一次性加载的情况下...
如果需要,从数据源中获取下一页的数据并添加到ListControl中。 4. 事件处理:处理LVN_SCROLL消息,以检测用户的滚动操作。同时,需要监听WM_VSCROLL和WM_HSCROLL消息,以便在用户滚动时触发分页逻辑。 5. 添加、...
本篇将深入探讨Android中实现List分页加载的技术原理、常见方法以及最佳实践。 一、分页加载基础概念 分页加载,也称为增量加载或惰性加载,是指在用户滚动列表到接近底部时,动态加载更多的数据。这样避免了首次...
下面将详细介绍这个分页插件的工作原理、使用方法以及可能涉及到的技术点。 一、工作原理 分页插件的核心思想是通过计算总页数,然后为每一页的数据生成相应的链接或者按钮,用户可以通过点击这些链接或按钮来切换...
在本例中,分页控件与List对象绑定,意味着当用户在分页控件中操作时,会触发相应的请求,获取对应页的数据并填充到列表中。 1. **数据绑定**:这是将服务器端数据与前端界面元素关联的技术,使得数据的改变能实时...
在IT行业中,分页显示数据列表是一个常见的需求,特别是在网页应用和...总之,分页显示数据列表是数据库驱动的Web应用中不可或缺的一部分,它涉及到数据库操作、数据传输、服务器端和客户端的页面渲染等多个环节。
在这个场景下,我们讨论的是如何使用JSP来实现数据的分页显示。分页是大型Web应用程序中常见的功能,它有助于提高用户体验,避免一次性加载大量数据导致页面响应变慢。下面将详细解释分页的基本思想和实现步骤。 1....
### List分页技术详解 #### 一、引言 在数据处理过程中,特别是涉及到大量数据展示时,分页是一项常见的需求。例如,在网页上显示文章列表、商品信息等,为了提高用户体验并减轻服务器负担,通常会采用分页的方式...
本实例将介绍如何利用Java和JSP实现一个简单的分页显示功能。 首先,我们需要理解分页的基本原理。分页通常涉及到两个关键参数:当前页码(currentPage)和每页显示的条目数量(pageSize)。通过这两个参数,我们...
这时,分页显示就显得尤为重要。分页技术能有效地解决这个问题,它将大量数据分成多个小部分,每次只加载一部分到界面中,从而提高应用的响应速度和用户交互体验。 在C#中实现DataGridView的分页显示,主要涉及以下...
"ListView分页显示上一页和下一页"这一主题,就是讨论如何实现ListView在用户滚动到列表底部时自动加载下一页数据,同时提供上一页的切换功能。 一、分页原理 分页的基本思想是将大量数据分为多个小部分(页)来...
在这个“ObjectList分页程序”中,我们主要探讨的是如何为ObjectList控件添加分页功能,以便用户可以更有效地浏览大量数据,而不会一次性加载所有记录,从而提高页面性能和用户体验。 分页是Web开发中的一个关键...
在SSH(Spring、Struts2和Hibernate)框架的整合开发中,分页显示是一个常见的需求,它能够提高用户体验,使得大量数据的展示更加有序和高效。以下是对SSH整合开发中分页显示的详细说明。 首先,我们需要在DAO层...
2. **Servlet处理**:Servlet接收到请求后,处理分页参数,与数据库进行交互,并将查询结果封装成对象,如List或Map。 3. **JSP展示**:Servlet将数据传递给JSP页面,JSP使用JSTL(JavaServer Pages Standard Tag ...
在本篇文章中,我们将详细介绍如何在基于Struts框架的项目中实现分页显示功能。Struts框架作为MVC(Model-View-Controller)架构模式的一个经典实现,广泛应用于Java Web开发中。分页显示是提高用户体验、减少服务器...
在大型应用中,数据通常需要进行分页显示,以提高用户体验和系统性能。本实例将详细讲解如何在C#中实现List集合的分页功能,并动态添加用户控件来展示数据,同时利用委托返回底标,实现对List集合的有效操作。 首先...
在B/S架构的应用程序中,数据分页是常见的功能,特别是在处理大量数据时,为了提高用户体验,我们需要将数据分成多个页面进行展示。...希望这些信息能帮助你更好地理解和应用JSP页面数据分页显示。
list的分页 import java.util.ArrayList; import java.util.List; import com.jsp.vo.Client; /** * PageBean * * @author apple * */ public class Page { private int currentPage; // 当前页数 ...