浏览 3769 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-18
用户对于JSP进行选择或输入后,点击提交,执行ACTION的另一个方法execute(),(如:test!execute.action),但是,这时在execute这个方法执行时,init()设置的域值都丢失了(firstString),重新为NULL。这个问题如何解决呢? public class Test extends ActionSupport { private String firstString; private String secondString; public String init() throws Exception{ firstString = "init in init()"; return SUCCESS; } public String execute() throws Exception{ secondString = firstString; return SUCCESS; } public String getFirstString() { return firstString; } public void setFirstString(String firstString) { this.firstString = firstString; } public String getSecondString() { return secondString; } public void setSecondString(String secondString) { this.secondString = secondString; } } 我的理解是,因为webwork是基于线程独立的,是不同的actionContext,因此,init()和execute()执行时,其实处于不同的线程实例,因此,init()里初始化的值,在execute()中,已不可见。不知道对不对? 那样的话,是不是我只能把init()的值(firstString)放到Session或者request中。除此之外,还有其他方法不? 谢谢! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-18
你分析的不错,ww对每个线程都会重新生成action实例,所以action的实例是不会在不同线程中共享的。
推荐几个做法: 1,把init处理后的数据做为隐藏域放到页面的form中,然后一并提交至action中处理。 2,利用spring2.0的session生命周期来管理这个action。(这个做法我没试过,只是理论上觉得可以) 一般我的做法都是用第一种方法~ |
|
返回顶楼 | |
发表时间:2007-01-18
另外还可以考虑用 webwork 的 continuation 方法..
|
|
返回顶楼 | |
发表时间:2007-01-18
定义个抽象类继承ActionSupport,然后在抽象类中的execute调用init,后你的Action继承这个抽象类
|
|
返回顶楼 | |
发表时间:2007-01-18
一般我也是采用hidden的input来传递参数,如果参数不多且不存在安全性问题,不建议用session.session终究是要保存在服务器端的,消耗内存,而且如果你不自己动手清,一直要占用到session过期。
页面传递比较好,消耗少。 |
|
返回顶楼 | |
发表时间:2007-01-20
谢谢各位的答复!
我发现,如果仅仅为了维持一个简单的String,Integer这种数值的话,使用hidden的确是一个解决的方法。 我举的例子比较简单,实际在用时,可能要维持一个对象实例,例如,一个查询页面,刚打开时,用一个List对象表示可供选则地区siteList,每一个list元素是一个SiteVO对象。在init()中初始化,在JSP中放到一个hidden中,在execute()中发现,siteList的确有值,但是值是这样: [com.mysite.vo.SiteVO@1f9cdda, com.mysite.vo.Site@139d369] 根本无法再还原为原来的siteList了。 |
|
返回顶楼 | |
发表时间:2007-02-02
郁闷,我现在用webwork只是管理请求分发,这些方法都没用过
|
|
返回顶楼 | |
发表时间:2007-02-14
让Spring来管理Action。Scope设成"session"。
|
|
返回顶楼 | |
发表时间:2007-02-14
晕,http form只能传点文本的,你企图传一个对象,那你就做一下序列化啊…… asp.net就是那么干的,一大堆东西序列化后放到hidden实现页面状态的效果。你直接把一个list对象toString当然只有一堆ref地址了。
|
|
返回顶楼 | |
发表时间:2007-02-22
在配置文件中这样配置就可以了,比如: xml 代码
注意指明type="chain"就可以了
|
|
返回顶楼 | |