第一步:
对象的可视范围:request、session、application、page。
Request:在一个请求周期内有效。就是从你点击页面上的一个按钮开始到服务器返回响应页面为止(包括响应页面)。
Session:在一个用户与服务器建立连接的整个过程中有效。
Application:在整个web应用程序内有效。
Page:仅在一个jsp页面内有效。
第二步:
ActionForm在你确定的有效期(可视范围)内是唯一的。
第三步:
在每次为ActionForm赋值前调用它的reset方法。作用是使ActionForm中的值恢复初始状态。在应用中我们可以通过在reset中为变量赋初值的方式,使得页面上的某个对象有显示值。
第四步:
可视范围与赋值前的初始化结合。
由于第二步所述特性,如果可视范围是request,则reset方法并不是很重要,因为你每次调用时都会产生一个新的ActionForm实例,所以你所操作的ActionForm不会与别人分享同时也就不会受别人的影响;如果可视范围是session,由于在session范围内此ActionForm是唯一的,所以你在session范围内需要用到此ActionForm的地方调用的都是同一个ActionForm,要是你没有在reset中对变量赋初值那么前一次调用ActionForm是为它赋的值将在此次调用时有效,这到也没什么。但是,如果恰巧再次调用时你仅仅需要为ActionForm中的一部分变量赋值,那么其余的变量将保持上一次得到的值,这样你就得到了一个“新旧混合体”,我想这多半不是你所期望的;如果可视范围是application,那其影响就更是不难理解了,这时不但是你自己会影响你自己,使用应用的其他用户的操作也会影响到你。
<转自:http://www.blogjava.net/zzheng/archive/2008/09/05/227207.html>
---------------------------------------------------------------------------------------------------------------------------------
说明:在Struts中对于每一个请求,控制器都会先调用ActionForm的reset( )方法,然后把用户输入的表单数
据组装到ActionForm中。也就是说,我们在显示界面中用到的表单的值(默认值),使用这里得到。
问题提出:很多人喜欢将验证使用Validator验证框架,它使用起来很方便。但在我们的实际工作当中,我
们需要将(比如一篇文章)的添加,编辑放在一个显示页面去操作,这样我们在编辑的时候就必须在现实
的页面查询到我们需要编辑的文章信息,如 标题,时间,内容,文章的录入人等这些信息,这样在显示
页面我们无法避免的在HTML代码中夹杂我们的查询(无论采用何种方式),然后将查询的内容对应到具
体使用的表单的value中进行编辑。这样,功能完成了,但页面看起来有些乱。
解决办法:利用ActionForm的reset()方法,利用它对数据初始化的能力。我们利用文章的ID号分别判断到
文章添加和编辑状态,然后再reset()方法中,可以结合数据库的查询将需要编辑的字段(表单值)初始化
在这里,(当然了添加就直接初始化了),这样我们的显示页面就只有HTML和Struts的标签了,显示页面
变得轻巧了许多。
优点:显示页面变得简洁轻巧,页面修改变得简单。
缺点:ActionForm reset()内容增加,变得庞大。需要很好的规划组织(当然了这种代价也是值得的)。
这种使用的方式可能有的朋友并不赞同,欢迎大家来讨论。因为没有什么是一成不变的,灵活的应用是我
们生存之道。
<转自:http://www.blogjava.net/kela/archive/2005/11/11/19278.html>