我的理解:
这个formbean是在第一次访问页面时产生实例的,由ActionServlet维护吧,然后如果再用到这个formbean的实例时,就查找,如果有实例存在就拿来用,没有就产生新的实例,而你在page2中使用的是在page1中生成的,此时的值有E1,E2,Es,在page2中继续使用这个实例,等于是你重新对E1,E2调用相应的setter方法,而Es一直是page1中产生的,一直存在着,并没有被重新设置.
我的理解:
这个formbean是在第一次访问页面时产生实例的,由ActionServlet维护吧,然后如果再用到这个formbean的实例时,就查找,如果有实例存在就拿来用,没有就产生新的实例,而你在page2中使用的是在page1中生成的,此时的值有E1,E2,Es,在page2中继续使用这个实例,等于是你重新对E1,E2调用相应的setter方法,而Es一直是page1中产生的,一直存在着,并没有被重新设置.

解决方案 »

  1.   

    formbean不是有个有效期吗?你把它改为会话不就行了?
      

  2.   

    lvyuanfang() 和我的理解也挺像
    但是我就是想确认一下,是否在Page2页面中能依赖于Es这个元素
    换句话说Formbean生命周期能否依赖于WebApp服务器实现的机制
    这是JSP规范还是只是局限于某一个Web服务器的行为(我用的是Tomcat)
      

  3.   

    formbean是有一个有效期,
    但是就算是设置为request(我的理解为周期只为一次提交的时候,提交结束后则为无效),
    他也会发生跨request的行为,
    也就是在多次request时会得到同一个Formbean
    这是否为web服务器的行为呢?
      

  4.   

    formbean如果是在session范围内就可以,两个页面都可以看到,如果是request就不可以了
      

  5.   

    formbean的创建策略是这样的,如果struts在你指定的scope中没有找到name对应的formbean,那么会帮你new一个,所以如果你的formbean的scope是指定为request,那么每次都会new出一个formbean,你的Es属性在request没有对应的parameter,当然也就不可能被struts赋值。
      

  6.   

    To  likeBean(喜欢吃咖啡豆):
    理论上是这样的,但是不知道各位是否了解Servlet
    Servlet本身不推荐使用类成员变量,成员变量会导致多线程访问出问题
    理论上每个Request请求应该让Server重新new一个实例
    但是好像Server有时候会用已经存在的Servlet来执行
      

  7.   

    我的理解就是我说的,至于scope那是另外一回事.
    而楼主的例子也是事实的事情,也证明了在page2中访问到Es,这跟我说的也是相符.
    可以再找相关东西看看!
      

  8.   

    同意 lvyuanfang() ( ) 信誉:99 的观点
    但是如果scope设置为Request,不就是想让这个对象成为类似于局部变量一样,只在这一次的Request中存在么?现在我在项目中就发现了有些人就利用这个特性做代码,
    (下一次Request仍然能获取上一次的FormBean,就算是FormBean的Scope设置为Request也不行)
    但是我觉得这个特性很不可靠,不应该是Servlet标准中的东西
    不知道我的观点正确否
      

  9.   

    我也认为是这样,不过这应该是struts实现的问题,不是servlet规范的东西!
      

  10.   

    yangcl(yangcl),这个应该说是最基本的问题,你应该相信struts不会有问题,检查你自己的程序吧,还有,尽量别在servlet中申明用户相关的私有变量。你说的跨request能访问同一个formbean的现象,如果你的formbean申明的scope是request,这种情况我还真的没遇过,我想也不可能出现,这是最基本的问题,哪个server发展到今天,都不会出现这种低级错误。
      

  11.   

    to likeBean(喜欢吃咖啡豆) :
    不管怎样,Thanks very much!
    代码我会再检查,看看到底出了什么问题
      

  12.   

    同意  lvyuanfang()  的观点,这也应该是 struts (Jsp Model1 Model2的区别吧)的特点吧各位有时间看看这个,差不多的问题
    http://community.csdn.net/Expert/topic/3750/3750947.xml?temp=.7102777
      

  13.   

    其实我理解的request的过程是这样的,当页面一提交时组装一个FormBean,再传到对应的ACTION中完成相应的业务逻辑,最后再到目的页面,只有当到了目的页面这个请求才算完.也就是说只有到这时才会注销FormBean.所以在目的页能访问到FormBean的属性就是正常了!!