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