用户对象:
[code="java"]
@Entity
public class User {
private Integer userid;
private String username;
private String password;
private int sex;
private int age;
private int befrom;
private Set<Role> roles = new HashSet<Role>();
//省略get、set方法
//......
}
[/code]
有一个编辑用户信息的页面userEdit.jsp,用户可以修改username,set,age,befrom,password信息,roles不会在这里被修改,因此页面也没有相应的input或其他控件与它对应,这样保存后,roles就丢失了。怎么办呢?是搞个隐藏域放roles吗?!
[b]
不好意思,写错地方了。应该是update方法[/b]
[code="java"] //新增或保存
public String doSave() {
if (null == user.getUserid()) {
// 然后再添加
userService.addUser(user);
} else {
// 根据Userid查询 roles列表
// 数据库操作
user.setRoles(roles);
userService.updateUser(user);
}
return SUCCESS;
} [/code]
你的Aciton中的信息如何?
当然不用搞隐藏域放roles,你可以先把roles放在request中,
request.setAttribute("roles",roles);
当修改后提交到修改action后,再从请求中取出roles就好了
[b]Actino中你新建了一个 User[/b]
[code="java"]
private User user=new User(); [/code]
[b]
User构造函数中,你构造了个空的 roles:[/b]
[code="java"]private Set roles = new HashSet(); [/code]
[b]
当然为空了。。。[/b]
还有action的配置要是type="dispatcher"才行
[b]
问题就出在你的UserAction的设计上,(这句代码):[/b]
[code="java"]private User user=new User(); [/code]
[b]
[color=blue]解释: Struts2中的Action是 Prototype的,即每次请求,都生成一个Action的实例。
所以,你请求SaveAction,准备调用doSave方法前,一个新的UserAction实例已经被创建了。
而在创建的过程中,新建了个User,且User的roles为空。恰恰,你没做任何处理,就保存了这个空的对象。[/color]
[/b]
[b]
最简单的方法:
在修改信息的jsp中,将roles的信息,显示在表单中。
然后在doSave中处理。[/b]
你把你的action调用流程描述一下先
你可以这样:
public class UserAction extends ActionSupport implements SessionAware {
@Resource
private UserService userService;
private User user=new User();
// ..........
//新增或保存
public String doSave() {
if (null == user.getUserid()) {
// 根据Userid查询 roles列表
// 数据库操作
user.setRoles(roles);
// 然后再添加
userService.addUser(user);
} else {
userService.updateUser(user);
}
return SUCCESS;
}
// ...........
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
[b]
你只需修改doSave的方法,在添加前,先查询roles信息,然后修改新建user的roles,最后再加入数据中。[/b]
[code="java"]//新增或保存
public String doSave() {
if (null == user.getUserid()) {
// 根据Userid查询 roles列表
// 数据库操作
user.setRoles(roles);
// 然后再添加
userService.addUser(user);
} else {
userService.updateUser(user);
}
return SUCCESS;
} [/code]