zoukankan      html  css  js  c++  java
  • 权限系统设计-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对象关联的部门对象为空;

  • 相关阅读:
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    Oracle分析函数-排序排列(rank、dense_rank、row_number、ntile)
  • 原文地址:https://www.cnblogs.com/Java0120/p/10013754.html
Copyright © 2011-2022 走看看