我们使用了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
转载于:https://blog.51cto.com/4610383/1397315