`
xxp3369
  • 浏览: 151275 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oa_04

阅读更多
利用Pager-Taglib实现机构管理的分页处理
- 重点理解Pager-Taglib的分页原理
- 为什么需要PagerModel对象


引用
1、拷贝pager-taglib.jar包
2、在JSP页面中使用taglib指令引入pager-taglib标签库
3、使用pager-taglib标签库进行分页处理

pg:pager【这个标签用来设置分页的总体参数】重要参数说明:
url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
items:总记录数,pager标签正是根据这个值来计算分页参数的
maxPageItems:每页显示的行数,默认为10
maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10

pg:first【第一页的标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 首页第一行的索引值
lastItem - 首页最后一行的索引值

pg:pre【上一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 前页第一行的索引值
lastItem - 前页最后一行的索引值

pg:next【下一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 下页第一行的索引值
lastItem - 下页最后一行的索引值

pg:last重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 尾页第一行的索引值
lastItem - 尾页最后一行的索引值

pg:pages【这个标签用来循环输出页码信息】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - pageNumber这个页码指定的那一页的第一行的索引值
lastItem - pageNumber这个页码指定的那一页的最后一行的索引值



package com.bjsxt.oa;

import java.util.List;

public class PagerModel {
	private List datas;
	private int total;
	
	public List getDatas() {
		return datas;
	}
	public void setDatas(List datas) {
		this.datas = datas;
	}
	public int getTotal() {
		return total;
	}
	public void setTotal(int total) {
		this.total = total;
	}
}



package com.bjsxt.oa.web.actions;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.actions.DispatchAction;

import com.bjsxt.oa.PagerModel;
import com.bjsxt.oa.manager.OrgManager;
import com.bjsxt.oa.model.Organization;
import com.bjsxt.oa.web.forms.OrgActionForm;

public class OrgAction extends DispatchAction {

	private OrgManager orgManager;
	
	/**
	 * 进入主界面
	 */
	@Override
	protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//
		
		OrgActionForm oaf = (OrgActionForm)form;
		int parentId = oaf.getParentId();
		
		int offset = 0;
		
		try {
			offset = Integer.parseInt(request.getParameter("pager.offset"));
		} catch (Exception ignore) {
		}
		int pagesize = 10;
		
		PagerModel pm = orgManager.searchOrgs(parentId,offset,pagesize);
		request.setAttribute("pm", pm);
		
		int ppid = 0;
		if(parentId != 0){
			Organization parent = orgManager.findOrg(parentId);
			if(parent.getParent() != null){
				ppid = parent.getParent().getId();
			}
		}
		request.setAttribute("ppid", ppid);
		
		return mapping.findForward("index");
	}
	
	/**
	 * 打开添加界面
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	public ActionForward addInput(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		
		return mapping.findForward("add_input");
	}

	//添加机构信息
	public ActionForward add(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		OrgActionForm oaf = (OrgActionForm)form;
		
		Organization org = new Organization();
		
		BeanUtils.copyProperties(org, oaf);
		
		orgManager.addOrg(org, oaf.getParentId());
		
		return mapping.findForward("pub_add_success");
	}
	
	public ActionForward del(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		OrgActionForm oaf = (OrgActionForm)form;
		int id = oaf.getId();

//		try{
			orgManager.delOrg(id);
//		}catch(Exception e){
			
//			ActionMessages msgs  = new ActionMessages();
//			
//			ActionMessage msg = new ActionMessage()
//			
//			msgs.add("m", msg);
			
			//传输的是普通消息
//			request.setAttribute(Globals.MESSAGES_KEY, msgs);
//			saveMessages(request, msgs);
			
			//传输的是错误消息
//			request.setAttribute(Globals.ERROR_KEY, msgs);
//			saveErrors(request, msgs);
//			
//			return mapping.findForward("org_exception");
//		}
		return mapping.findForward("pub_del_success");
	}	
	
	public ActionForward updateInput(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
			return mapping.findForward("update_input");
	}
	
	public ActionForward update(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
			return mapping.findForward("pub_update_success");
	}

	public void setOrgManager(OrgManager orgManager) {
		this.orgManager = orgManager;
	}
}



<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@include file="/common/common.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Pager-taglib分页处理演示</title>
</head>
<body>
<pg:pager items="1001" maxPageItems="33" maxIndexPages="20" export="currentPageNumber=pageNumber">
	<pg:first>
		<a href="${pageUrl}">首页</a>
	</pg:first>
	<pg:prev>
		<a href="${pageUrl}">前页</a>
	</pg:prev>
	<pg:pages>
		<c:choose>
			<c:when test="${currentPageNumber eq pageNumber}">
				<font color="red">${pageNumber }</font>
			</c:when>
			<c:otherwise>
				<a href="${pageUrl}">${pageNumber }</a>
			</c:otherwise>
		</c:choose>
	</pg:pages>
	<pg:next>
		<a href="${pageUrl}">下页</a>
	</pg:next>
	<pg:last>
		<a href="${pageUrl}">尾页</a>
	</pg:last>
</pg:pager>
</body>
</html>



<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@include file="/common/common.jsp" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<link href="style/oa.css" rel="stylesheet" type="text/css">
<script language="javascript" src="script/public.js"></script>
<title>人员管理</title>
</head>
<BODY bgColor=#dee7ff leftMargin=0 background="" topMargin=0 marginheight="0" marginwidth="0">
<center>
      <TABLE width="778" border=0 cellPadding=0 cellSpacing=0 borderColor=#ffffff bgColor=#dee7ff style="FONT-SIZE: 10pt">
        <TBODY>
          <TR height=35>
            <TD align=middle width=20 background=images/title_left.gif 
          bgColor=#dee7ff></TD>
            <TD align=middle width=120 background=images/title_left.gif 
          bgColor=#dee7ff><FONT color=#f7f7f7> 机构管理<font color="#FFFFFF">&nbsp;</font></FONT> </TD>
            <TD align=middle width=11 background=images/title_middle.gif 
          bgColor=#dee7ff><FONT color=#f7f7f7>&nbsp;</FONT> </TD>
            <TD align=middle background=images/title_right.gif 
          bgColor=#dee7ff><FONT color=#f7f7f7>&nbsp;</FONT> </TD>
          </TR>
        </TBODY>
      </TABLE>
      <TABLE width="778" border=0 align=center cellPadding=0 cellSpacing=0 borderColor=#ffffff style="FONT-SIZE: 10pt">
        <TBODY>
          <TR>
            <TD width="82%" height=14 align=right vAlign=center noWrap>
            </TD>
            <TD width="18%" align=right vAlign=center noWrap> </TD>
          </TR>
          <TR>
            <TD height=14 align=right vAlign=center noWrap>
            	<!-- 在这里插入查询表单 -->
            </TD>
            <TD height=14 align="left" vAlign=center noWrap>
            <% 
            /**
            * 在这里定义“添加”,“查询”等按钮
            * <input type="image" name="find" value="find" src="images/cz.gif">
            * &nbsp;&nbsp;&nbsp;&nbsp; 
            * <a href="#" onClick="BeginOut('document.do?method=addInput','470')">
            * <img src="images/addpic.gif" border=0 align=absMiddle style="CURSOR: hand"></a>
            */
            %>
            <a href="#" onClick="openWin('org.do?method=addInput&parentId=${orgForm.parentId }','addperson',600,200);">添加机构信息</a>
            <a href="org.do?parentId=${ppid }">返回</a>
            </TD>
          </TR>
          <TR>
            <TD height=28 colspan="2" align=right vAlign=center noWrap background=images/list_middle.jpg>&nbsp;&nbsp;
            <!-- 可以在这里插入分页导航条 -->
            </TD>
          </TR>
        </TBODY>
      </TABLE>
      <table width="778" border="0" cellPadding="0" cellSpacing="1" bgcolor="#6386d6">
          <!-- 列表标题栏 -->
	      <tr bgcolor="#EFF3F7" class="TableBody1">
		      <td width="5%" height="37" align="center"><b>序号</b></td>
		      <td width="18%" height="37" align="center"><B>机构名称</B></td>
		      <td width="18%" height="37" align="center"><b>机构编号</b></td>
		      <td width="18%" height="37" align="center"><b>父机构名称</b></td>
              <td width="5%" height="37" align="center"><b>操作</b></td>
          </tr>
          <!-- 列表数据栏 -->
          <c:if test="${!empty pm.datas}">
          <c:forEach items="${pm.datas }" var="org">
	      <tr bgcolor="#EFF3F7" class="TableBody1" onMouseOver="this.bgColor = '#DEE7FF';" onMouseOut="this.bgColor='#EFF3F7';">
		      <td align="center" vAlign="center">${org.id }</td>
	          <td align="center" vAlign="center"><a href="org.do?parentId=${org.id }">${org.name }</a></td>
	          <td align="center" vAlign="center">${org.sn }</td>
	          <td align="center" vAlign="center">${org.parent.name }</td>
	          <td align="center" vAlign="center">
	          	<a href="#" onClick="del('org.do?method=del&id=${org.id }')">删除</a>
	          </td>
        </tr>
        </c:forEach>
		</c:if>
        <!-- 在列表数据为空的时候,要显示的提示信息 -->
	    <c:if test="${empty pm.datas}">
	    <tr>
	    	<td colspan="7" align="center" bgcolor="#EFF3F7" class="TableBody1" onMouseOver="this.bgColor = '#DEE7FF';" onMouseOut="this.bgColor='#EFF3F7';">
	    	没有找到相应的记录
	    	</td>
	    </tr>
	    </c:if>
      </table>
      <TABLE width="778" border=0 align=center cellPadding=0 cellSpacing=0 borderColor=#ffffff style="FONT-SIZE: 10pt">
        <TBODY>
          <TR>
            <TD height=28 align=right vAlign=center noWrap background=images/list_middle.jpg>&nbsp;&nbsp;
            <!-- 可以在这里插入分页导航条 -->
<pg:pager url="org.do" items="${pm.total}" export="currentPageNumber=pageNumber">
	<pg:param name="parentId"/>
	<pg:first>
		<a href="${pageUrl}">首页</a>
	</pg:first>
	<pg:prev>
		<a href="${pageUrl}">前页</a>
	</pg:prev>
	<pg:pages>
		<c:choose>
			<c:when test="${currentPageNumber eq pageNumber}">
				<font color="red">${pageNumber }</font>
			</c:when>
			<c:otherwise>
				<a href="${pageUrl}">${pageNumber }</a>
			</c:otherwise>
		</c:choose>
	</pg:pages>
	<pg:next>
		<a href="${pageUrl}">下页</a>
	</pg:next>
	<pg:last>
		<a href="${pageUrl}">尾页</a>
	</pg:last>
</pg:pager>            
    		</TD>
          </TR>
        </TBODY>
      </TABLE>
</center>

</body>

</html>



package com.bjsxt.oa.manager.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.bjsxt.oa.PagerModel;
import com.bjsxt.oa.manager.OrgManager;
import com.bjsxt.oa.manager.SystemException;
import com.bjsxt.oa.model.Organization;

public class OrgManagerImpl extends HibernateDaoSupport implements OrgManager {
	
	public void addOrg(Organization org, int parentId) {
		if(parentId != 0){
			org.setParent(findOrg(parentId));
		}
		getHibernateTemplate().save(org);
		
		//自动生成机构编号
		org.setSn(
			(org.getParent() == null ? "" : org.getParent().getSn() + "_")
			+ org.getId()
		);
		
		getHibernateTemplate().update(org);
	}

	public void delOrg(int orgId) {
		Organization org = findOrg(orgId);
		
		//判断子机构列表是否为空
		if(org.getChildren().size() > 0){
			//throw new RuntimeException("存在子机构信息,不允许删除");
//			SystemException se = new SystemException("");
//			se.setKey();
//			se.setValues(..);
			throw new SystemException("errors.org.hassuborg",new Object[]{org.getName(),org.getChildren().size()},"存在子机构信息,不允许删除");
		}
		
		//判断人员是否非空
		String hql = "select count(*) from Person p where p.org.id = ?";
		Long personSize = (Long)getSession().createQuery(hql).setParameter(0, orgId).uniqueResult();
		if(personSize > 0){
			throw new RuntimeException("机构下面有人员信息,不允许删除");
		}
		
		getHibernateTemplate().delete(org);
	}

	public Organization findOrg(int orgId) {
		return (Organization)getHibernateTemplate().load(Organization.class, orgId);
	}

	public PagerModel searchOrgs(int parentId,int offset,int pagesize) {
		
		//查询总记录数
		String selectCountHql = "select count(*) from Organization o where o.parent is null";
		if(parentId != 0){
			selectCountHql = "select count(*) from Organization o where o.parent.id = "+parentId;
		}
		int total = ((Long)getSession().createQuery(selectCountHql).uniqueResult()).intValue();
		
		
		//查询当前页的数据
		String hql = "select o from Organization o where o.parent is null";
		if(parentId != 0){
			hql = "select o from Organization o where o.parent.id = "+parentId;
		}
		List datas = getSession().createQuery(hql)
						.setFirstResult(offset)
						.setMaxResults(pagesize)
						.list();
		 
		PagerModel pm = new PagerModel();
		pm.setDatas(datas);
		pm.setTotal(total);
		
		return pm;
	}

	public void updateOrg(Organization org, int parentId) {
		if(parentId != 0){
			org.setParent(findOrg(parentId));
		}
		getHibernateTemplate().update(org);
		
	}

}
分享到:
评论

相关推荐

    Silentsoul04#vulnerability-paper-1#泛微OA9前台任意文件上传1

    泛微OA9前台任意文件上传漏洞位于: /page/exportImport/uploadOperation.jsp文件中Jsp流程大概是:判断请求是否是mult

    oa系统代码4

    “oa_gl_04”这个文件名可能代表着“办公管理”的第四部分,可能是通达OA系统中关于财务管理、资源分配或者工作流程管理的模块。在OA系统中,这类功能通常涉及到日常的报销审批、项目预算控制、资产管理和人力资源...

    Java就业班OA项目实战培训视频【12讲】

    资源名称:Java就业班OA项目实战培训视频【12讲】资源目录:【】Java就业班OA项目实战01【】Java就业班OA项目实战02【】Java就业班OA项目实战03【】Java就业班OA项目实战04【】Java就业班OA项目实战05【】Java就业班...

    通达OA2015破解补丁

    通达Redis缓存数据库服务版本: 2015.04.16 通达定时任务服务版本: 2015.03.16 通达监控服务版本: 2015.03.16 通达手机短信服务版本: HTTP服务器软件: nginx/PHP 5.3.29 HTTP端口号: 8000 数据库软件...

    简单OA办公系统+Java源码+mysql数据库

    在下载的压缩包`f620dacb8bc04e4b9f0c4e98f95bc46d`中,可能包含以下文件和目录: - `src`:源代码目录,包含了Java类文件,可能有实体类、DAO(数据访问对象)、Service(业务逻辑)和Controller(控制层)等。 - ...

    通达OA2015破解版

    安装原版通达OA2015试用版,通达官网下载。 下载此破解补丁,解压并覆盖myoa/webroot,即可! 软件名称: Office Anywhere 2015版 皇冠集群版 对应版本的说明 版权所有: 北京通达信科科技有限公司 ...

    启明星OA系统 11.0.rar

    启明星OA系统(原启明星Portal系统)包含了新闻,通知,文档,图库和流程表单内容。...启明星OA系统 11.0 更新日志:2016-04-13对原Portal进行了大幅度精简,对由可定制页面调整为内置页面。减少使用复杂度。

    方配办公自动化系统(OA) 1.2.rar

    方配办公自动化系统(OA)是一款永久免费、功能强大的办公OA系统。方配办公自动化系统(OA) 1.2 更新日志:2015-04-191.更新优化工作流引擎2.新增公告发布应用3.新增附件阅读器应用4.更新后台版本至最新版本4.7

    1_04_XX项目组管理机制.doc

    3. **信息发布制度**:项目文档应及时更新并提交给客户,上传至OA系统供所有项目组成员查阅。项目进度通过电子邮件在每周例会后发布,重大事项需通过正式邮件通知所有相关成员。 4. **问题跟踪制度**:任何在项目...

    ASP版本的OA系统

    (版本:1.0 2006.04.05) 1.同时支持多种数据库。 2.程序模块化编写,各功能模块基本都已进行封装,调用方便。 3.采用仿C/S操作界面,操作简单,易于上手,界面仿江南行客的NET-OA系统,功能不相同。 4.重要...

    通达OA2010 3.6.110428 破解补丁纯净版-自动升级

    3、 通达OA 精灵版本:最新版本号 2011-04-28(去除通达官方信息及链接,已封装,安装即可) 4、 邮件代理服务程序:最新版本号 2011-04-28 补丁 5、 定时任务服务版本:最新版本号 2010-12-03补丁 6、 守护服务...

    公司帮手免费OA发布包

    在“公司帮手免费OA发布包2015.04.15”中,我们可以推测这是一次在2015年4月15日发布的更新版本。以下将详细解析OA系统的一些核心知识点: 1. **协同工作**:OA系统的核心在于协同工作,它通过网络平台使企业员工...

    北大青鸟 Accp 5.0 电子课件 Y2 HR CRM OA B2C毕业设计项目开发(HR CRM OA B2C Project).part04.rar

    北大青鸟 Accp 5.0 电子课件 Y2 HR CRM OA B2C毕业设计项目开发(HR CRM OA B2C Project) 共计15个压缩包,需要全部下载才能解压.

    最新北大青鸟OA办公系统

    5. **版本控制**:"OA最新版MyOffice--11-04"表明这是在11月4日更新的最新版本,可能包含了一些新功能、性能优化或bug修复。 6. **源代码注释**:描述中提到源代码注释齐全,这对于开发者来说是非常宝贵的资源,...

    JAVA软件部署&#40;将文件夹放于E盘下&#41;.doc

    1. 安装JDK:通常会将JDK安装文件(如j2sdk-1_4_2_04-windows-i586-p.exe)下载并执行,安装路径可自定义,这里假设安装在C:\j2sdk1.4.2_04。 2. 配置环境变量: - JAVA_HOME:指向JDK的安装路径,例如C:\j2sdk...

    OA办公自动化管理系统详细设计说明书.doc

    3. 模块功能详细设计:2013/08/04。 4. 对象设计:2013/08/05。 5. 升级及审核签字确认系统:2013/08/08。 OA 办公自动化管理系统的详细设计说明书包括: 1. 目录:包括目录、引言、总体设计、模块设计、对象设计...

    公司帮手免费OA v2015.08.23.rar

    公司帮手免费OA v2015.04.15发布。 1、增加部分模块的浏览记录功能。 2、增加流程审批功能。 3、修复部分BUG。 4、切记、如果是更新,更新前先备份好之前的程序和数据库。 ===================================...

    2021HW行动漏洞披露和漏洞修复分析.zip

    2021/04/08 致远OA 致远OA 前台getshell 复现 致远OA任意文件上传 2021/04/08 齐治堡垒机 存在命令执行漏洞,POC疑似已流出 2021/04/08 深信服EDR(历史漏洞) 深信服EDR远程命令执行 CNVD-2020-46552 2021/04/08 ...

    ItcastOA04_itcastoa_

    "ItcastOA04_itcastoa_"这个标题可能代表了一个在线教育平台如传智播客(Itcast)的OA(Online Assessment)课程中的第四部分,专注于Java集合框架的学习。描述中提到这是关于“自学的java关于集合框架的一些程序”...

    java+mysql学生学籍后台管理系统OA源码

    04、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务! 05、禁止用本站源码用于非法商业用途,不得违反国家法律,否则后果自负! 06、如发现资源链接无法下载、失效或广告,请联系管理员或提交工单...

Global site tag (gtag.js) - Google Analytics