package org.springside.examples.showcase.common.web;
import java.util.List;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.hibernate.StaleStateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springside.examples.showcase.common.entity.User;
import org.springside.examples.showcase.common.service.AccountManager;
/**
* 用户管理Action.
*
* @author calvin
*/
@Namespace("/common")
@InterceptorRefs( { @InterceptorRef("paramsPrepareParamsStack") })
@Results( { @Result(name = CrudActionSupport.RELOAD, location = "user.action", type = "redirect") })
public class UserAction extends CrudActionSupport<User> {
private static final long serialVersionUID = 7240853226114035208L;
private AccountManager accountManager;
//-- 页面属性 --//
private String id;
private User entity;
private List<User> allUserList;
private Integer workingVersion;//对象版本号, 配合Hibernate的@Version防止并发修改
private List<String> checkedUserIds;
//-- ModelDriven 与 Preparable函数 --//
public User getModel() {
return entity;
}
public void setId(String id) {
this.id = id;
}
@Override
protected void prepareModel() throws Exception {
if (id != null) {
entity = accountManager.getUser(id);
} else {
entity = new User();
}
}
//-- CRUD Action 函数 --//
@Override
public String list() throws Exception {
allUserList = accountManager.getAllUserWithRole();
return SUCCESS;
}
@Override
public String input() throws Exception {
return INPUT;
}
/**
* 保存用户时,演示Hibernate的version字段使用.
*/
@Override
public String save() throws Exception {
if (workingVersion < entity.getVersion()) {
throw new StaleStateException("对象已有新的版本");
}
accountManager.saveUser(entity);
return RELOAD;
}
@Override
public String delete() throws Exception {
throw new UnsupportedOperationException("delete操作暂时未支持");
}
//-- 其他Action函数 --//
public String disableUsers() {
accountManager.disableUsers(checkedUserIds);
return RELOAD;
}
//-- 页面属性访问函数 --//
public List<User> getAllUserList() {
return allUserList;
}
public void setCheckedUserIds(List<String> checkedUserIds) {
this.checkedUserIds = checkedUserIds;
}
public void setWorkingVersion(Integer workingVersion) {
this.workingVersion = workingVersion;
}
@Autowired
public void setAccountManager(AccountManager accountManager) {
this.accountManager = accountManager;
}
}