主要是修改页面,
页面上有个 公司类型的<s:select>,list当然就是个集合了
提交错误表单到服务器被拦截回来后,<s:select>的数据就没了,这个list也没了
不知道怎么解决这个问题,困扰了我好久
开始用ajax做的,但是不能把现在的 公司类型 设为selected
当然用js的话肯定能实现就是比较麻烦,不知道struts2有没有什么方法保存原有的集合数据

解决方案 »

  1.   

    提交错误表单到服务器被拦截回来后
    你是Redirect还是forward?
      

  2.   

    list集合从get方法中取得。1.User 类:
      private String id;
      private String name;
      两个属性有get/set方法。
    2.Action:public List<User> getListInfo() {   List<User> lst = new ArrayList<User>();
       lst = dao.getUserAll();
       return lst;
    }3.jsp
    <s:select name="test" list="listInfo" listKey="id" listValue="name"/>总结:
    如果校验失败,返回到jsp,在处理<s:select/>标签会找getListInfo方法,所以数据就保存住了。
      

  3.   

    可是哥们。。我没保存住啊。。
    我提交错误表单后那list就没了
      

  4.   


    提交错误表单到服务器被拦截回来后, <s:select>的数据就没了,这个list也没了 
    原因很清楚,就是你验证没有通过。然后跳转到你相应的提示错误信息的页面。这里就是
    你当前的页面了,既然是执行验证后提示错误 才没有list值。那么你可以在验证的方法
    里面把list也设值一遍。
    也就是:
    getList() {
         setList(...);
         跳转到显示页面,也就是表单,公司类型的 <s:select>,
    }
    validate() {
         setList(...);//同样setList一下
         进入时就有值了
    }
    struts2 验证是这样的,当用户提交表单,struts会找到对应的action,首先会执行action对应表单的
    名称所对应的“验证方法”,如果验证成功,就执行action的表单方法,然后就跳转到成功的视图组件。否则就会跳转到 input="错误页面"多在当前表单页面。而不继续执行action的表单对应的方法。