您的位置:首页 > 编程语言 > Java开发

Struts2使用ModelDriven对象值到前台为空?

2014-04-17 16:18 851 查看
我们使用了Struts2的接口ModelDriven来实现对对象的封装跟前台数据进行交互,这个时候需要实现getModel方法,即:
@Override
public User getModel() {
if(user == null){
user = new User();
}

return user;
}


但是我们自定了了一个获取用户的方法:

public String getUserById(){
user = userService.getUserById(user.getUid());
if(user == null){
msg = "不能获得指定用户!";
return "fail";
}
System.out.println(user.getUname());
return "modify";
}


当我们页面有相对于的对象属性值,通过debug标签查看,全部为null?这是为啥。

其实这个是由于Struts2使用到的值栈(Value Stack)机制有关。

原因:getModel这个方法会返回user对象,把原先查询到的user对象要压入栈之后再压入,这样旧的值就被覆盖了,所以之后user对象就变为一个新的new出来对象,相应的属性必然为空。

解决的方法:

在struts.xml的action里面修改属性:modelDriven.refreshModelBeforeResult,这样在返 回结果之前会清掉user。这样才能得到我们相要的结果。

<interceptor-ref name="defaultStack">
<param name="modelDriven.refreshModelBeforeResult">true</param>
</interceptor-ref>


参考自:http://blog.csdn.net/li_tengfei/article/details/6098145 http://blog.csdn.net/zhang854429783/article/details/8221733
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Struts2 null ModelDriven