用户管理的设计--5.用户信息的保存

页面效果

1.当新增用户时,保存用户信息,并刷新用户管理首页

 

2.当编辑已存在的用户时,更新用户信息,并刷新用户管理首页


 

实现步骤

1.Action类中定义save()及edit()

/**  
    * @Name: save
    * @Description: 新增用户保存
    * @Parameters: 无
    * @Return: String:跳转到close.jsp
    */
    public String save(){
        elecUserService.saveUser(elecUser);
        return "close";
    }
    
    /**  
    * @Name: edit
    * @Description: 跳转到用户编辑页面
    * @Parameters: 无
    * @Return: String:跳转到userEdit.jsp
    */
    public String edit(){
        //1.获取用户ID
        String userID = elecUser.getUserID();
        //2.使用用户ID,查询ElecUser对象,支持表单回显,这里的user是放栈顶的对象,不同于elecUser
        ElecUser user=elecUserService.findUserByID(userID);
        //将VO对象的属性值,放入PO对象的属性值
        user.setViewflag(elecUser.getViewflag());
        //3.将ElecUser对象放入栈顶,页面使用struts2标签回显
        ValueUtils.pushValueStack(user);
        //4.加载数据字典,用来遍历性别,职位,所属单位,是否在职
        this.initSystemDDL();
        //5.二级联动的表单回显
        //(1)从ElecUser对象获取所属单位的编号
        String ddlCode = user.getJctID();
        //(2)根据所属单位和数据项编号,获取数据项的值
        String ddlName=elecSystemDDLService.findDdlNameByKeywordAndDdlCode("所属单位",ddlCode);
        //(3)使用查询的数据项的值,作为数据类型,查询该数据类型的对应的集合,返回List<ElecSystemDDL>
        List<ElecSystemDDL> jctUnitList = elecSystemDDLService.findSystemDDLListByKeyword(ddlName);
        request.setAttribute("jctUnitList", jctUnitList);
        return "edit";
    }

 

2.struts.xml中添加

<!-- 全局转发 -->
<global-results>
      <!--子页面关闭,刷新父页面-->
       <result name="close">/close.jsp</result>
</global-results>

用户管理<action>下添加

<result name="add">/WEB-INF/page/system/userAdd.jsp</result>
<result name="edit">/WEB-INF/page/system/userEdit.jsp</result>

 

3.service实现类中定义用户保存方法

/**  
    * @Name: saveUser
    * @Description: 新增用户保存
    * @Parameters: ElecUser:VO对象
    * @Return: 无
    */
    @Override
    @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)
    public void saveUser(ElecUser elecUser) {
        //获取用户ID
        String userID = elecUser.getUserID();
        //判断是新增还是编辑
        if(StringUtils.isNotBlank(userID)){
            //更新
            elecUserDao.update(elecUser);
        }else{
            //组织PO对象,保存用户(1条数据)
            elecUserDao.save(elecUser);
        }      
    }

 这里获取用户ID值得是获取页面传递的userID,在jsp页面通过添加一个隐藏域实现,隐藏域中存放userID的值:

<s:hidden name="userID"></s:hidden>

 

4.在web.xml中添加

<!-- 
    添加spring解决hibernate懒加载的问题,过滤器 该过滤器一定要放置到struts2过滤器的前面
    原理:延迟了Session的关闭时间,在页面上关闭
    -->
    <filter>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

添加OpenSessionInViewFilter过滤器是因为在上面编辑方法edit()中,user对象压入栈顶后,session关闭清空,再进行二级联动表单回显时,无法完成懒加载。

 

5.关闭子页面,刷新用户管理首页面

<%@ page language="java"  pageEncoding="UTF-8"%>
<script language="javascript" src="${pageContext.request.contextPath }/script/function.js"></script>
<html>
<head>
<title>操作成功</title>
</head>
<Script language="javascript">
function closeMethod(){
    refreshOpener();
}
</Script>
<body onload="closeMethod()">
操作成功!
</body>
</html>
JSP页面代码

其中refreshOpener的js代码如下:

function refreshOpener(){

    //opener.location.href=sHref;
    opener.location.reload();
    window.close();
}

 

posted on 2017-07-12 22:27  一只笨笨鸟  阅读(373)  评论(0编辑  收藏  举报