当一个页面全过参数过来后,struts2会调用相应的set方法,所有的属性都会封装在valueStack里面,有没有什么方法,可以删除valueStack中的封装的某些属性?
我试过
request.setAttribute("struts.valueStack",null);
valueStack.set(属性,null);

但还是回传数据了?

解决方案 »

  1.   

    public abstract class MailBaseAction extends ActionSupport implements
            Preparable, ServletRequestAware{
    public void prepare() throws Exception {
    Map params = ActionContext.getContext().getParameters();
    params.remove("key");//--指定要移除的参数 }
    }Action继承此类即可
      

  2.   

    有时间可以研究一下STRUTS2的源代码。
    从源代码方面解决问题是最好的问题。
    看过源代码后基本上这种问题就可以迎刃而解。
      

  3.   

    如果不想让struts2封装某些请求参数,可以不在Action或模型类中定义相应的属性即可。如http://localhost:8080/abc.action?name=xyz&age=20如果楼主不想让struts2封装age请求参数,只需要在action类或模型类中定义name属性就可以了。这个valuestack中就没有age属性了。
    因为struts 2是根据属性来封装请求参数的。
      

  4.   

    对,你可以不给某个属性提供setter方法则,你就可以达到要求
      

  5.   

    还有是,你不是想删除valueStack中的对象吗!
    其实你没必要手动删除,因为struts2在一次请求执行完后,不是会经过FilterDespitch这个过滤器吗
    它会给你自动清除的
    如果你一定要手动删除的话,也可以,因为valueStack 是ActionContext中的根对象
    所以你可以通过ActionContext.getContext().getRoo()获取到valueStack对象
    然后调用相应的方法进行删除操作