权限系统设计-day02
练习中的问题:
1,<s:url action="employee_input" />
这个标签用来让struts自动生成请求的路径,struts生成的路径是一个全路径,包含了context/package/action_method.action
1),context:就是我们在tomcat里面配置的path
2),package:struts中的包路径;
3),action_method:写在s:url标签中的action;
4),.action:就是在struts中配置的后缀名;
2,<s:a action="employee_input"><s:param name="employee.id" value="#u.id"/>编辑</s:a>
这个标签用来让struts自动生成<a>标签;
1),生成的a标签的href也是全路径;
2),在a标签中可以加上<s:param>,
<s:param name="" value=""/>
1),name属性代表添加到url中的参数的名字;
2),value属性代表添加到url中参数的值;
3,修改掉值的问题:
现象:在修改的时候,如果修改页面中有一些属性不需要修改,在修改之后,这些属性的值就没了;
原因:在编辑的时候,数据包装到这个Employee中的,由于表单数据缺失,employee中会少一些属性;
在update方法中,直接修改这个实例,hibernate中,会根据对象生成完整的UPDATE语句,所以属性被null覆盖了
解决方法:在包装参数之前,先把employee查询出来,在查询出来的对象上面再包装值;
prepare拦截器:
1,如果我们的Action实现了Preparable接口,prepare拦截器就会在我这个action所有的方法执行之前调用;
2,可以只拦截指定的方法;
1),比如 要拦截的方法名字叫做save;
2),在Action中创建一个public void prepareSave()方法,这个方法就可以在save方法执行之前执行;
3,默认情况下,在defalut-stack中,prepare拦截器是先于params拦截器执行的,所以在prepare拦截器中不能直接得到参数;
4,把默认拦截器栈修改为paramsPrepareParamsStack;
4,opensessioninview:
问题的出现:当我的employee和dept关联,在列表里面就显示不出来dept相关信息(no session的错误)
解决:提前开启session,延迟关闭session(把sesion的开启和关闭放到filter中);我们就把这种模式称为open session in view;这种模式专门用来处理延迟加载的问题;
注意,使用了Opensessioninview的模式,我们必须保证,这个opensessioninview的filter使用的是spring提供的;
spring处理session是一整套方案:
1,在filter中开启session,放到current thread中;
2,在aop的事务中,得到当前的session,开启事务;
3,在dao中(sessionFactory),得到当前的session,处理DML+QUERY;
4,在aop的事务结束时,提交事务(并不会关闭session);
5,请求返回的时候,在filter中关闭session;
5,在修改employee的时候,修改了department,报错;
问题原因:因为使用了opensessioninviewfilter,所以在prepareSave中查询到的employee和employee关联的department都是持久化对象,在提交数据的时候,我们修改了department的OID值,在hibernate中,是不允许修改持久化对象的OID的;所以hibernate报错;
解决问题:在prepareSave方法中,设置得到的employee对象关联的部门对象为空;
权限系统设计-day02的更多相关文章
- 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(四)授权代码维护
一.前言 权限系统设计中,授权代码是用来控制数据访问权限的.授权代码说白了只是一树型结构的数据,没有什么其它的业务意义.那么这个页面的功能也就非常简单授权代码维护:新增.修改.删除授权代码数据. 二. ...
- 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(三)图形化机构树
一.前言 组织机构是国内管理系统中很重要的一个概念,以前我们基本都是采用数据列表的形式展现,最多只是采用树形列表展现.虽然够用,但是如果能做成图形化当然是最好不过了.这里我不用任何图形控件,就用最原始 ...
- 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(二)菜单导航
一.前言 上篇博客中已经总体的说了一下权限系统的思路和表结构设计,那接下来我们就要进入正文了,先从菜单导航这个功能开始. 二.实现 这个页面基本不用什么需求分析了,大家都很明白,不过在这个页面要多维护 ...
- 权限系统设计实现MVC4 + WebAPI + EasyUI + Knouckout
权限系统设计实现MVC4 + WebAPI + EasyUI + Knouckout (一) 一.前言 之前的博客一直都还没写到框架的实现及权限系统,今天开始写我的权限系统,我以前做过的项目基本上都有 ...
- 基于Spring Cloud、JWT 的微服务权限系统设计
基于Spring Cloud.JWT 的微服务权限系统设计 https://gitee.com/log4j/pig https://github.com/kioyong/spring-cloud-de ...
- 基于RBAC模型的权限系统设计(Github开源项目)
RBAC(基于角色的访问控制):英文名称Rose base Access Controller.本博客介绍这种模型的权限系统设计.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来 ...
- SpringSecurity原理剖析与权限系统设计
Spring Secutity和Apache Shiro是Java领域的两大主流开源安全框架,也是权限系统设计的主要技术选型.本文主要介绍Spring Secutity的实现原理,并基于Spring ...
- 权限系统设计(0):权限系统设计基本概念改需-MAC/RBAC引子
此篇主要对权限系统设计所涉的一些专业术语重点梳理.从我们windows的文件系统 自主访问控制 到基于角色访问控制. 权限设计基本术语 对后面会用到的词汇做一个简要说明 什么是权限(许可) 权限(Pr ...
- 若依管理系统RuoYi-Vue(二):权限系统设计详解
若依Vue系统中的权限管理部分的功能都集中在了系统管理菜单模块中,如下图所示.其中权限部分主要涉及到了用户管理.角色管理.菜单管理.部门管理这四个部分. 一.若依Vue系统中的权限分类 根据观察,若依 ...
随机推荐
- rpmbuild analysis
- python之地基(二)
上一个阶段呢,我们已经学习了python的数据的类型.今天呢,我们来学习各种各样的运算符. 一.基本运算符 a = 10 b = 20 运算符号 描述 示例 + 加——两个对象相加 a+b 输出 ...
- Python3学习笔记十五
---恢复内容开始--- 1. jquery的属性操作 $().attr(属性名) 取值 $().attr(属性名,属性值) 赋值 <!DOCTYPE html> &l ...
- openv
https://www.cnblogs.com/xishuai/p/centos-openvpn.html https://www.cnblogs.com/biaopei/category/11029 ...
- Lua脚本在redis分布式锁场景的运用
目录 锁和分布式锁 锁是什么? 为什么需要锁? Java中的锁 分布式锁 redis 如何实现加锁 锁超时 retry redis 如何释放锁 不该释放的锁 通过Lua脚本实现锁释放 用redis做分 ...
- pkuwc2018题解
题解: 思路挺好想的..然而今天写代码写成傻逼了 d1t1: 首先比较暴力的就是$f[i][j]$表示i个这个点是j的概率 然后前缀和一下dp就是$n^2$的 部分分树形态随机就说明树深度是$log$ ...
- Android Studio编译卡死
首先,用AS,你必须fanqiang,其它都是次要的. AS/bin/*.exe.vmoptions ## *DO NOT* modify this file directly. If there i ...
- OrchardCore 如何实现模块化( Modular )和 Multi-Tenancy
一.概述 通常我们会在 Startup 类通过 void ConfigureServices(IServiceCollection services) 配置应用的服务.常见的形如 AddXXX 的方法 ...
- eclipse乱码解决
设置utf-8 1.点击window>preferences>content types 2.点击右侧Text 3.点击Java Source File 4.下面输入UTF-8 5.点击u ...
- 并发编程futuretask
package com.mrbird.api.demoThread.thread1; /** * @Description * @Date: 2019/3/29 */ import java.util ...