详细有哪些功能:

初始化数据

  • 权限数据。
  • 超级管理员。

Installer.java

package cn.xbmu.oa.install;

import javax.annotation.Resource;
import org.apache.commons.codec.digest.DigestUtils;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import cn.xbmu.oa.domain.Privilege;
import cn.xbmu.oa.domain.User;
/**
* 安装应用程序的时候,就初始化好数据
* @author Administrator
*
*/
@Component
public class Installer {
@Resource
private SessionFactory sessionFactory;
@Transactional
public void install() {
Session session = sessionFactory.getCurrentSession(); // =====================================
// 1.超级管理员
User user = new User();
user.setName("超级管理员");
user.setLoginName("admin");
user.setPassword(DigestUtils.md5Hex("admin"));// 使用MD5摘要信息 加密
session.save(user);// 保存
// 2.权限数据
Privilege menu, menu1, menu2, menu3, menu4, menu5;
menu = new Privilege("系统管理", null, "FUNC20082.gif", null);
menu1 = new Privilege("岗位管理", "roleAction_list", null, menu);
menu2 = new Privilege("部门管理", "departmentAction_list", null, menu);
menu3 = new Privilege("用户管理", "userAction_list", null, menu); session.save(menu);
session.save(menu1);
session.save(menu2);
session.save(menu3); session.save(new Privilege("岗位列表", "roleAction_list", null, menu1));
session.save(new Privilege("岗位加入", "roleAction_add", null, menu1));
session.save(new Privilege("岗位删除", "roleAction_delete", null, menu1));
session.save(new Privilege("岗位改动", "roleAction_edit", null, menu1)); session.save(new Privilege("部门列表", "departmentAction_list", null, menu2));
session.save(new Privilege("部门加入", "departmentAction_add", null, menu2));
session.save(new Privilege("部门删除", "departmentAction_delete", null,menu2));
session.save(new Privilege("部门改动", "departmentAction_edit", null, menu2)); session.save(new Privilege("用户列表", "userAction_list", null, menu3));
session.save(new Privilege("用户加入", "userAction_add", null, menu3));
session.save(new Privilege("用户删除", "userAction_delete", null, menu3));
session.save(new Privilege("用户改动", "userAction_edit", null, menu3));
session.save(new Privilege("用户初始化password", "userAction_initPassword", null,menu3)); // ------------------------- menu = new Privilege("网上交流", null, "FUNC20064.gif", null);
menu1 = new Privilege("论坛管理", "forumManageAction_list", null, menu);
menu2 = new Privilege("论坛", "forumAction_list", null, menu); session.save(menu);
session.save(menu1);
session.save(menu2); // ------------------------- menu = new Privilege("审批流转", null, "FUNC20057.gif", null);
menu1 = new Privilege("审批流程管理", "processDefinitionAction_list", null,
menu);
menu2 = new Privilege("申请模板管理", "applicationTemplateAction_list", null,
menu);
menu3 = new Privilege("起草申请", "flowAction_applicationTemplateList",
null, menu);
menu4 = new Privilege("待我审批", "flowAction_myTaskList", null, menu);
menu5 = new Privilege("我的申请查询", "flowAction_myApplicationList", null,
menu); session.save(menu);
session.save(menu1);
session.save(menu2);
session.save(menu3);
session.save(menu4);
session.save(menu5); } public static void main(String[] args) {
System.out.println("正在执行安装");
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Installer installer = (Installer) ac.getBean("installer");
installer.install();
System.out.println("安装完毕");
}
}

能够执行该main方法,就能够将数据初始化的数据加入到数据库中。

可是这样的方式,不适合用户使用,因此我们能够在window环境下 ,写一个批处理文件 install.bat ,让用户双击就可以进行一键安装应用时并初始化数据。
install.bat
假设在Linux系统下。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

project结构:
  

完毕设置权限页面:

/xbmuoa/WebRoot/WEB-INF/jsp/roleAction/list.jsp
<!--显示数据列表-->
<tbody id="TableData" class="dataContainer" datakey="roleList">
<s:iterator value="roleList">
<tr class="TableDetail1 template">
<td>${name} </td>
<td>${description} </td>
<td><s:a action="roleAction_delete.action?id=%{id}" onClick="return delConfirm()">删除</s:a>
<s:a action="roleAction_editUI.action? id=%{id}">改动</s:a>
<s:a action="roleAction_setPrivilegeUI? id=%{id}" >设置权限</s:a>
</td>
</tr>
</s:iterator>
</tbody>

RoleAction.java

package cn.xbmu.oa.view.action;

import java.util.List;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import cn.xbmu.oa.base.BaseAction;
import cn.xbmu.oa.domain.Privilege;
import cn.xbmu.oa.domain.Role;
import com.opensymphony.xwork2.ActionContext;
@Controller
@Scope("prototype")
public class RoleAction extends BaseAction<Role>{
private Long[] privilegeIds; /**查询*/
public String list() throws Exception {
List<Role> roleList = roleService.findAll();
ActionContext.getContext().put("roleList", roleList);
return "list";
}
/**删除*/
public String delete() throws Exception {
roleService.delete(model.getId());
return "toList";
}
/**加入页面*/
public String addUI() throws Exception {
return "saveUI";
}
/**加入*/
public String add() throws Exception {
//保存到数据库中
roleService.save(model);
return "toList";
}
/**改动页面*/
public String editUI() throws Exception {
Role role = roleService.getById(model.getId());
//放到栈顶
ActionContext.getContext().getValueStack().push(role);
return "saveUI";
}
/**改动*/
public String edit() throws Exception {
//从数据库中取出原对象
Role role = roleService.getById(model.getId()); //设置要改动的属性
role.setName(model.getName());
role.setDescription(model.getDescription()); //更新到数据库中
roleService.update(role); return "toList";
}
/**设置权限界面*/
public String setPrivilegeUI(){
List<Privilege> privilegeList = privilegeService.findAll();
ActionContext.getContext().put("privilegeList", privilegeList);
return "setPrivilegeUI";
}
//=================================================
public Long[] getPrivilegeIds() {
return privilegeIds;
}
public void setPrivilegeIds(Long[] privilegeIds) {
this.privilegeIds = privilegeIds;
} }

struts.xml

<!-- 岗位管理 -->
<action name="roleAction_*" class="roleAction" method="{1}">
<result name="list">/WEB-INF/jsp/roleAction/list.jsp</result>
<result name="saveUI">/WEB-INF/jsp/roleAction/saveUI.jsp</result>
<result name="setPrivilegeUI">/WEB-INF/jsp/roleAction/setPrivilegeUI.jsp</result>
<result name="toList" type="redirectAction">roleAction_list</result>
</action>

PrivilegeService.java

package cn.xbmu.oa.service;

import cn.xbmu.oa.base.BaseDao;
import cn.xbmu.oa.domain.Privilege; public interface PrivilegeService extends BaseDao<Privilege>{ }

PrivilegeServiceImpl.java

package cn.xbmu.oa.service.impl;

import org.springframework.stereotype.Service;

import cn.xbmu.oa.base.BaseDaoImpl;
import cn.xbmu.oa.domain.Privilege;
import cn.xbmu.oa.service.PrivilegeService; @Service
public class PrivilegeServiceImpl extends BaseDaoImpl<Privilege> implements
PrivilegeService { }
setPrivilegeUI.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>
<head>
<title>配置权限</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="javascript" src="${pageContext.request.contextPath}/script/jquery.js"></script>
<script language="javascript" src="${pageContext.request.contextPath}/script/pageCommon.js" charset="utf-8"></script>
<script language="javascript" src="${pageContext.request.contextPath}/script/PageUtils.js" charset="utf-8"></script>
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/pageCommon.css" />
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/file.css" /> </head>
<body> <!-- 标题显示 -->
<div id="Title_bar">
<div id="Title_bar_Head">
<div id="Title_Head"></div>
<div id="Title"><!--页面标题-->
<img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 配置权限
</div>
<div id="Title_End"></div>
</div>
</div> <!--显示表单内容-->
<div id=MainArea>
<form action="list.html">
<div class="ItemBlock_Title1"><!-- 信息说明 --><div class="ItemBlock_Title1">
<img border="0" width="4" height="7" src="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 正在为【部门经理】配置权限 </div>
</div> <!-- 表单内容显示 -->
<div class="ItemBlockBorder">
<div class="ItemBlock">
<table cellpadding="0" cellspacing="0" class="mainForm">
<!--表头-->
<thead>
<tr align="LEFT" valign="MIDDLE" id="TableTitle">
<td width="300px" style="padding-left: 7px;">
<!-- 假设把全选元素的id指定为selectAll,而且有函数selectAll(),就会有错。由于有一种使用方法:能够直接用id引用元素 -->
<input type="CHECKBOX" id="cbSelectAll" onClick="selectAll(this.checked)"/>
<label for="cbSelectAll">全选</label>
</td>
</tr>
</thead> <!--显示数据列表-->
<tbody id="TableData">
<tr class="TableDetail1">
<!-- //TODO:显示权限树 -->
<td>
<s:checkboxlist name="privilegeIds" list="#privilegeList" listKey="id" listValue="name" />
</td>
</tr>
</tbody>
</table>
</div>
</div> <!-- 表单操作 -->
<div id="InputDetailBar">
<input type="image" src="${pageContext.request.contextPath}/style/images/save.png"/>
<a href="javascript:history.go(-1);"><img src="${pageContext.request.contextPath}/style/images/goBack.png"/></a>
</div>
</form>
</div> <div class="Description">
说明:<br />
1,选中一个权限时:<br />
     a,应该选中 他的全部直系上级。<br />
     b,应该选中他的全部直系下级。<br />
2,取消选择一个权限时:<br />
     a,应该取消选择 他的全部直系下级。<br />
     b,假设同级的权限都是未选择状态。就应该取消选中他的直接上级,并递归向上做这个操作。 <br /> 3,全选/取消全选。 <br />
4,默认选中当前岗位已有的权限。<br />
</div> </body>
</html>

执行效果:

数据回显:

RoleAction.java
/**设置权限界面*/
public String setPrivilegeUI(){ //准备数据
Role role = roleService.getById(model.getId());
ActionContext.getContext().put("role", role); List<Privilege> privilegeList = privilegeService.findAll();
ActionContext.getContext().put("privilegeList", privilegeList);
//回显数据
privilegeIds = new Long[role.getPrivileges().size()];
int index = 0;
for(Privilege privilege : role.getPrivileges()){
privilegeIds[index++] = privilege.getId();
} return "setPrivilegeUI";
}
/**设置权限*/
public String setPrivilege(){
//1.取出源对象
Role role = roleService.getById(model.getId());
//2.设置权限属性
List<Privilege> privileges = privilegeService.getByIds(privilegeIds);
role.setPrivileges(new HashSet<Privilege>(privileges));
//3.保存到数据库
roleService.update(role);
return "toList";
}

setPrivilegeUI.jsp

<s:form action="roleAction_setPrivilege">
<s:hidden name="id"/>
<div class="ItemBlock_Title1"><!-- 信息说明 --><div class="ItemBlock_Title1">
<img border="0" width="4" height="7" src="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 正在为【部门经理】配置权限 </div>
</div> <!-- 表单内容显示 -->
<div class="ItemBlockBorder">
<div class="ItemBlock">
<table cellpadding="0" cellspacing="0" class="mainForm">
<!--表头-->
<thead>
<tr align="LEFT" valign="MIDDLE" id="TableTitle">
<td width="300px" style="padding-left: 7px;">
<!-- 假设把全选元素的id指定为selectAll,而且有函数selectAll(),就会有错。由于有一种使用方法:能够直接用id引用元素 -->
<input type="CHECKBOX" id="cbSelectAll" onClick="selectAll(this.checked)"/>
<label for="cbSelectAll">全选</label>
</td>
</tr>
</thead> <!--显示数据列表-->
<tbody id="TableData">
<tr class="TableDetail1">
<!-- //TODO:显示权限树 -->
<td>
<s:checkboxlist name="privilegeIds" list="#privilegeList" listKey="id" listValue="name" />
</td>
</tr>
</tbody>
</table>
</div>
</div> <!-- 表单操作 -->
<div id="InputDetailBar">
<input type="image" src="${pageContext.request.contextPath}/style/images/save.png"/>
<a href="javascript:history.go(-1);"><img src="${pageContext.request.contextPath}/style/images/goBack.png"/></a>
</div>
</s:form>

执行效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

打开数据库。里面已经有数据

OA项目实战学习(7)——初始化数据&amp;权限配置显示的更多相关文章

  1. 一个比较全面 的web项目实战学习

    一个比较全面 的web项目实战学习:http://www.cnblogs.com/jikey/p/3613082.html

  2. 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚

    新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...

  3. Asp.Net Core 2.0 项目实战(3)NCMVC角色权限管理前端UI预览及下载

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  4. OA项目实战(二) 开发准备

    上次的博文OA系统实践(一) 概述中,我们已经了解了OA的相关概念.从本次博文开始,我们做一个简单的OA实例. 在OA开发之前,有几个工作们需要提前做.一个是对需求进行分析,另一个是对开发环境进行选择 ...

  5. MVC + EFCore 项目实战 - 数仓管理系统2- 搭建基本框架配置EFCore

    本次课程就正式进入开发部分. 首先我们先搭建项目框架,还是和之前渐进式风格保持一致,除必备组件外,尽量使用原生功能以方便大家理解. 开发工具:vs 2019 或以上 数据库:SQL SERVER 20 ...

  6. CentOS学习笔记--账号管理与权限配置

    Linux 的账号管理与权限配置 管理员的工作中,相当重要的一环就是『管理账号』啦! 使用者标识符: UID 与 GID 虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux ...

  7. OA项目实战(一) 概述

    从本篇博文开始,我为大家简单介绍一下办公自动化(Office Automation,简称OA). 1.OA简介     OA是将现代办公和计算机网络的功能相结合的一种新型办公方式,是针对日常工作,改变 ...

  8. 分布式架构--Dubbo项目实战学习文档

    安装Dubbo注册中心(Zookeeper-3.4.6) 安装Dubbo管理控制台 Tomcat中部署web应用 ---- Dubbo服务消费者Web应用war包的部署 Dubbo监控中心的介绍与简易 ...

  9. 从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记10

    P57 .1-Solidity Types - 玩转 Solidity 数组 (Arrays) 学习目标 1.掌握Arrays的可变不可变的创建 2.深度理解可变数组和不可变数组之间的区别 3.二维数 ...

随机推荐

  1. phpcms功能列表

    上1 站点首页 就是前台首页 会员中心 跳到会员中心页面 搜索 新闻,图片等文档搜索 锁屏 锁住账号 Phpcms 官网 授权 官网查询 支持论坛 官网论坛 帮助 官网帮助 上2 我的面板 个人信息 ...

  2. HDU 4716 A Computer Graphics Problem (水题)

    A Computer Graphics Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  3. 从 n 个数字中选出 m 个不同的数字,保证这 m 个数字是等概率的

    问题如上. 这是我被面试的一个题目. 我的第一反应给出的解决的方法是.开启  n 个线程并标记序号,各个线程打印出它的序号.直到有 m 个线程被调度时,停止全部线程. 打印出的序号即是 m 个等概率出 ...

  4. pytest文档27-pytest分布式执行(pytest-xdist)

    前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟.如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候, 我们会用测试人力成本换取时间成本,这个时候多找 ...

  5. Mantis邮件服务器配置

    1.在apache下的php.ini中修改(这里是以163的邮箱为例子):[mail function];For Win32 only.SMTP = smtp.163.com; //设置邮箱的发送地址 ...

  6. ping + 时间 日志

    :top set PINGIP="192.168.1.236" echo %date% %time%>>%PINGIP%.txt ping -n 1 %PINGIP% ...

  7. GeoHash核心原理解析及java代码实现(转)

    原文链接:http://blog.jobbole.com/80633/ 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩,肚肚饿了,于是乎 ...

  8. 用wubi安装的Ubuntu在重装Windows 7系统后,如何恢复(转)

    原文链接:双系统Win7+Ubuntu,重装Win7后找不到Ubuntu启动引导项问题 1.把安装ubuntu->winboot文件夹下wubidr和wubidr.mbr两个文件拷到C盘根目录下 ...

  9. there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

    建表语句: create table test_table(   id integer not null auto_increment primary key,   stamp_created tim ...

  10. kth-smallest-element-in-a-sorted-matrix

    //有很多讨论,比如 // https://discuss.leetcode.com/topic/52865/my-solution-using-binary-search-in-c // https ...