在Struts配置文件中配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="user-action" extends="struts-default" namespace="/user"> <action name="user_*" class="zhongfucheng.user.action.UserAction" method="{1}"> </action> </package> </struts>
- 添加user模块的Struts配置文件到总配置文件中
<!--User模块--> <include file="zhongfucheng/user/config/user-struts.xml"/>
完成美工设计页面显示
对美工给的页面进行调整
导入到项目中:
这里写图片描述
我们发现在JSP页面中,以下的代码是经常会出现的,因此我们把它封装一下:
这里写图片描述
创建一个公共文件,封装经常用到的jsp页面:
这里写图片描述
要使用的地方,直接导入就行了:
<head> <%@include file="/common/header.jsp"%> <title>用户管理</title> </head>
接下来只要对各个功能进行填充逻辑代码,就可以了。
添加用户UI
public String addUI() { return "addUI"; }
效果如图所示:我们的头像和角色先不做,把其他的先做了再看看。
这里写图片描述
确定添加用户
写上我们请求的路径:
/*************注入Service************************/ @Qualifier("userServiceImpl") @Autowired private UserService userServiceImpl; /************数据自动封装,给出setter和getter*************************/ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } /************得到Service返回的数据*************************/ private List<User> userList; public String add() { userServiceImpl.save(user); //跳转到列表显示页面 return "list"; }
- 配置跳转到列表显示页面的result【Action重定向的方式,防止刷新再次请求】
<!--返回列表展示页面,重定向到列表展示--> <result name="list" type="redirectAction"> <param name="actionName">user_listUI</param> </result>
- 效果:下面的列表展示还没有做呢,但是添加用户的效果已经做出来了。
这里写图片描述
列表展示
/************得到Service返回的数据*************************/ //这里一定要给setter和getter方法,这样JSP才能够得到属性。不然就得不到了!!!我在这里弄了很久!!!! private List<User> userList; public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } public String listUI() { userList = userServiceImpl.findObjects(); return "listUI"; }
JSP通过iterator得到数据,直接写就行了。因为Action中该属性有getter方法:
<s:iterator value="userList"> <tr bgcolor="f8f8f8"> <td align="center"><input type="checkbox" name="selectedRow" value="<s:property value="id"/> "/></td> <td align="center"><s:property value="name"/></td> <td align="center"><s:property value="account"/></td> <td align="center"><s:property value="dept"/></td> <td align="center"><s:property value="gender?'男':'女'"/></td> <td align="center"><s:property value="email"/></td> <td align="center"> <a href="javascript:doEdit(<s:property value="id"/>)">编辑</a> <a href="javascript:doDelete(<s:property value="id"/>)">删除</a> </td> </tr> </s:iterator>
这里写图片描述
修改功能
这里写图片描述
public String editUI() { //外边已经传了id过来了,我们要找到id对应的User if (user.getId() != null && user != null) { //直接获取出来,后面JSP会根据User有getter就能读取对应的信息! user = userServiceImpl.findObjectById(this.user.getId()); } return "editUI"; }
- JSP修改用户的界面是不用显示id的,但是我们在修改用户的时候,是根据id来修改的。因此我们加入一个隐藏域
<s:hidden name="user.id"/>
- 指定处理的路径:
action="${basePath}user/user_edit.action"
- 修改的方法:
public String edit() { //Struts2会自动把JSP带过来的数据封装到User对象上 if (user.getId() != null && user != null) { userServiceImpl.update(user); } //跳转回列表展示 return "list"; }
- 效果:
这里写图片描述
删除功能
delete方法就非常简单了:
function doDelete(id) { document.forms[0].action = "${basePath}user/user_delete.action?user.id="+id; document.forms[0].submit(); }
public String delete() { if (user.getId() != null && user != null) { userServiceImpl.delete(user.getId()); } return "list"; }
这里写图片描述
批量删除
这里写图片描述
响应点击事件:
function doDeleteAll() { document.forms[0].action = "${basePath}user/user_deleteSelect.action"; document.forms[0].submit(); }
- Action使用一个String[]接收复选框来过来的数据
private String[] selectedRow; public String[] getSelectedRow() { return selectedRow; } public void setSelectedRow(String[] selectedRow) { this.selectedRow = selectedRow; } public String deleteSelect() { for (String s : selectedRow) { userServiceImpl.delete(s); } return "list"; }
前面我们在写用户模块的时候还有一些没有解决掉的问题:
这里写图片描述