JavaEE项目实战(OA系统)之十_部门管理之四
四、action
action部分是struts框架处理页面请求的核心。
在struts2中,一个Action类可以是一个普通的类,并不需要继承自特殊的类。
一个Action类中可以有多个方法,在每个方法前加注解@Action,并指定访问路径即可。
在实际业务中,把action分成两种,一种有前缀词to,例如toDeptList,toDeptAdd,toDeptEdit,表示这个操作是要跳转到列表页、新增页、编辑页,在跳转前一般需要先取得数据,再跳转到指定页面;另一种没有前缀词to,例如deptAdd,deptUpdate,deptDel,表示这个操作是对数据的实际操作,将会执行数据的新增、修改、删除等,一般先执行数据操作,再跳转到指定页面。
在Action类前,用@Result注解指定跳转页面。
需要与页面交互的变量,都可以定义在Action类中,作为该类的一个属性,例如dept,deptList,deptId等,这些变量需要在页面和Action之间来回传递,所以都定义为Action类的属性,并提供get/set方法。
代码如下:
// 结果页
@Results({ @Result(name = "list", location = "/manage/basic/deptList.jsp"),
@Result(name = "add", location = "/manage/basic/deptAddEdit.jsp"),
@Result(name = "edit", location = "/manage/basic/deptAddEdit.jsp"), })
public class DeptAction {
@Resource
private DeptBiz deptBiz; // 业务逻辑层对象
private Dept dept; // 实体对象
private List<Dept> deptList; // 列表对象
private int deptId; // id
private String oper; // 用于区分新增或修改
private String msg; // 错误提示
// 跳转到列表页
@Action(value = "toDeptList")
public String toList() {
// 取得列表
deptList = deptBiz.getAll();
return "list";
}
// 跳转到新增页
@Action(value = "toDeptAdd")
public String toAdd() {
// 初始化对象
dept = new Dept();
oper = "add";
return "add";
}
// 跳转到修改页
@Action(value = "toDeptEdit")
public String toEdit() {
// 取得对象
dept = deptBiz.getById(deptId);
oper = "edit";
return "edit";
}
// 新增动作
@Action(value = "deptAdd")
public String add() {
try {
if (dept.getpId() == 0) {
dept.setLevel(1);
} else {
Dept parent = deptBiz.getById(dept.getpId());
dept.setLevel(parent.getLevel() + 1);
}
// 保存对象
deptBiz.add(dept);
// 重新取得列表
deptList = deptBiz.getAll();
// 跳转到列表页
return "list";
} catch (Exception e) {
e.printStackTrace();
// 错误提示
msg = "部门新增失败!";
// 跳转回新增页
return "add";
}
}
// 修改动作
@Action(value = "deptUpdate")
public String update() {
try {
if (dept.getpId() == 0) {
dept.setLevel(1);
} else {
Dept parent = deptBiz.getById(dept.getpId());
dept.setLevel(parent.getLevel() + 1);
}
// 保存对象
deptBiz.update(dept);
// 重新取得列表
deptList = deptBiz.getAll();
// 跳转到列表页
return "list";
} catch (Exception e) {
e.printStackTrace();
// 错误提示
msg = "部门修改失败!";
// 跳转回修改页
return "edit";
}
}
// 修改动作
@Action(value = "deptDel")
public String del() {
try {
// 删除对象
deptBiz.del(deptId);
} catch (Exception e) {
e.printStackTrace();
}
// 重新取得列表
deptList = deptBiz.getAll();
// 跳转到列表页
return "list";
}
// getter & setter
// ......
}