我们使用了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