详细有哪些功能:

初始化数据

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

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. win8.1快速启动选项突然消失了怎么办?

    win8开始提供的快速启动功能是一种混合式的休眠模式,Windows系统 在关机时将系统的信息保存到硬盘上的一个文件中来实现下一次的快速启动.当再次启动电脑时, Windows 使用该系统信息文件来恢 ...

  2. nyist oj 214 单调递增子序列(二) (动态规划经典)

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 ,a2...,an}(0<n<=100000).找出单调递增最长子序列,并求出其长度 ...

  3. MVC使用Dotnet.HighCharts做图表01,区域图表

    如果想在MVC中使用图表显示的话,DotNet.HighCharts是不错的选择.DotNet.HighCharts是一个开源的JavaScript图表库,支持线型图表.柱状图标.饼状图标等几十种图标 ...

  4. datagrid在MVC中的运用09-实现排序

    本文体验datagrid的排序. □ 思路 当点击datagrid的标题,视图传递给Controller的Form Data类似这样:page=1&rows=10&sort=Custo ...

  5. SHP文件合并

    ArcGIS中合并SHP文件是一个常用的操作,下面简要讲解一下如何合并. 使用ArcGIS Tool Box(ArcGIS工具箱)中的Data Management Tools-->Genera ...

  6. Spring-Bean配置-使用外部属性文件(转)

    Spring-Bean配置-使用外部属性文件 所以可以通过@value注解获取配置文件的key-value,生成一个配置文件bean.用以在代码中直接使用bean的方式. •在配置文件里配置Bean时 ...

  7. 正确理解java编译时,运行时以及构建时这三个概念

    Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型:编译时类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个pers ...

  8. activity之间參数传递&amp;&amp;获取activity返回值&amp;&amp;activity生命周期

    Activity之间參数传递 A activity想将參数传给B activity时能够利用Intent将消息带过去 Intent intent = new Intent(this,BActivity ...

  9. MATLAB 人脸定位

    faceimg = x222;faceDetector = vision.CascadeObjectDetector();bbox = step(faceDetector, faceimg);face ...

  10. 使用Adt自带的工具进行Android自己主动化測试(三)

    在这个系列的上一篇文章中,我们介绍了MonkeyRunner,并提到假设依据坐标来编写自己主动化脚本的话存在着一定的局限性(点击文末"阅读原文"能够打开这篇文章查看).这篇文章将进 ...