ActionForm的生命周期是这样的: “控制器收到的请求”->“创建或再循环ActionForm”->“调用reset()“->“正确保存ActionForm”->“由请求组合ActionForm”->“验证ActionForm”。如果验证不通过返回到输入,否则调用Action的execute()方法。
如果可视范围是request,则reset方法并不是很重要,因为你每次调用时都会产生一个新的ActionForm实例,所以你所操作的ActionForm不会与别人分享同时也就不会受别人的影响;如果可视范围是session,由于在session范围内此ActionForm是唯一的,所以你在session范围内需要用到此ActionForm的地方调用的都是同一个ActionForm,要是你没有在reset中对变量赋初值那么前一次调用ActionForm为它赋的值将在此次调用时有效。你可以把scope设置为session,并且不实现reset方法

解决方案 »

  1.   

    楼上没有回答我的问题,不管什么范围,在reset之后总是要把表单输入的数据装进去,那即使是session范围,也要装入吧,但是没有。对于过程,我还是比较了解的
      

  2.   

    当在表单里改变一个元素的值后,提交再回到此页面时ActionForm会调用reset()方法置初始值,这时你通过上一操作付的值就会冲掉了...
    在你的ActionForm里不要实现reset方法!!你就看出区别了!!
      

  3.   

    我想有一种可能是,你的值是bean:write的,不是使用text,hitten...这种东西,所以有些值丢失了。
      

  4.   

    to xunyiren:
      如果不调用reset,上一次的值就不会冲掉,那么,这次的值也不会被装入,这个session是不是也太破了,改都改不了.
    to nullhue:
      不是的,是复选框之类的,标准的,你试试就知道了。
      

  5.   

    我还得顶,为什么session的新数据就装不进去???????????????????????????????????????????????????????????????????????????????????????????????
      

  6.   

    TO 楼主,我用的session存储范围的ActionForm是可以在setAttribute来重新赋值的,你的只能用reset()?书上写的reset方法里恢复到原始值是指初始化的值,而不是说不能赋值。
      

  7.   

    我的意思是actionform没有自动把新值装入,装入也不用setAttribute,非得reset到初始值时,新值才能被装入,你没有看明白我的意思。
      

  8.   

    xunyiren已经说的很清楚了啊。
    楼主是说你的值不能自动set进去?奇怪,我从来没有遇到过这样的事情。
    reset与否很有用哦,比如你设定了初值a=a。默认是session有效的,如果你已经在前面传递了a=b,那么你以后再次调用此actionform时,如果不对a传递值,则a=b,而非a=a。所以解决方法有2:1、每次都传递a;2、实现reset方法,在里面a=a,由于每次都会调用此方法,所以不会受
    session的影响。