页面效果
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>
其中refreshOpener的js代码如下:
function refreshOpener(){ //opener.location.href=sHref; opener.location.reload(); window.close(); }