`
powersite
  • 浏览: 2952 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

webwork同一个ACTION不同操作时,域值的困惑。

阅读更多
    webwork中,在1个ACTION内,定义了2个方法,init()用于加载JSP页面时调用(如:test!init.action,初始化JSP的一些显示初始值(例如firstString)。
    用户对于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中。除此之外,还有其他方法不?
    谢谢!
分享到:
评论
9 楼 温柔一刀 2007-02-22  
<p>在配置文件中这样配置就可以了,比如:</p>
<font>
<div class='code_title'>xml 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-xml'>
    <li class='alt'><span><span class='tag'>&lt;</span><span class='tag-name'>action</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"init"</span><span>  </span></span> </li>
    <li class=''><span>   </span><span class='attribute'>class</span><span>=</span><span class='attribute-value'>"xxx.Test"</span><span> </span><span class='attribute'>method</span><span>=</span><span class='attribute-value'>"init"</span><span class='tag'>&gt;</span><span>  </span> </li>
    <li class='alt'><span>   </span><span class='tag'>&lt;</span><span class='tag-name'>result</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"success"</span><span> </span><span class='attribute'>type</span><span>=</span><span class='attribute-value'>"chain"</span><span class='tag'>&gt;</span><span>test.action&lt;/</span><span class='tag'><span class='tag-name'>result</span><span class='tag'>&gt;</span><span>  </span> </span></li>
    <li class=''><span>  &lt;/</span><span class='tag'><span class='tag-name'>action</span><span class='tag'>&gt;</span><span>  </span> </span></li>
    <li class='alt'><span>     </span> </li>
    <li class=''><span>  </span><span class='tag'>&lt;</span><span class='tag-name'>action</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"test"</span><span>  </span> </li>
    <li class='alt'><span>   </span><span class='attribute'>class</span><span>=</span><span class='attribute-value'>"xxx.Test"</span><span class='tag'>&gt;</span><span>  </span> </li>
    <li class=''><span>   </span><span class='tag'>&lt;</span><span class='tag-name'>result</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"success"</span><span class='tag'>&gt;</span><span>xxx.jsp&lt;/</span><span class='tag'><span class='tag-name'>result</span><span class='tag'>&gt;</span><span>  </span> </span></li>
    <li class='alt'><span>  &lt;/</span><span class='tag'><span class='tag-name'>action</span><span class='tag'>&gt;</span><span>  </span> </span></li>
</ol>
</div>
<p>注意指明<span class='attribute'>type</span><span>=</span><span class='attribute-value'>"chain"就可以了</span></p>
<p> </p>
</font>
8 楼 tiyi 2007-02-14  
晕,http form只能传点文本的,你企图传一个对象,那你就做一下序列化啊…… asp.net就是那么干的,一大堆东西序列化后放到hidden实现页面状态的效果。你直接把一个list对象toString当然只有一堆ref地址了。
7 楼 AlexHwang 2007-02-14  
让Spring来管理Action。Scope设成"session"。
6 楼 freemanxm84 2007-02-02  
郁闷,我现在用webwork只是管理请求分发,这些方法都没用过
5 楼 powersite 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了。
4 楼 skydream 2007-01-18  
一般我也是采用hidden的input来传递参数,如果参数不多且不存在安全性问题,不建议用session.session终究是要保存在服务器端的,消耗内存,而且如果你不自己动手清,一直要占用到session过期。

页面传递比较好,消耗少。
3 楼 jamesby 2007-01-18  
定义个抽象类继承ActionSupport,然后在抽象类中的execute调用init,后你的Action继承这个抽象类
2 楼 kdekid 2007-01-18  
另外还可以考虑用 webwork 的 continuation 方法..
1 楼 foxty 2007-01-18  
你分析的不错,ww对每个线程都会重新生成action实例,所以action的实例是不会在不同线程中共享的。

推荐几个做法:
1,把init处理后的数据做为隐藏域放到页面的form中,然后一并提交至action中处理。
2,利用spring2.0的session生命周期来管理这个action。(这个做法我没试过,只是理论上觉得可以)

一般我的做法都是用第一种方法~

相关推荐

    Webwork.in.action最新中文版

    《Webwork.in.Action》是一本深入探讨Webwork框架的书籍,中文版的出现使得国内开发者能够更方便地学习和理解这一强大的Java web开发框架。Webwork是由一系列组件组成的MVC(Model-View-Controller)框架,它在Java...

    WebWork入门教程[创建你第一个WebWork action]

    这个"WebWork入门教程[创建你第一个WebWork action]"将引导你了解如何利用WebWork来构建动态的Web应用程序。让我们深入探讨WebWork的核心概念、Action的创建以及如何实现基本的流程控制。 **WebWork核心概念** 1. ...

    webwork in action

    #### 三、创建第一个WebWork Action 一旦设置好基本的项目环境,就可以开始创建你的第一个Action了。 1. **创建Action类**:在WebWork中,Action类是处理HTTP请求的核心。这些类通常继承自`...

    webwork.in.action中文pdf版 part1

    webwork.in.action中文版 pdf版本

    webwork in action 源代码

    《WebWork in Action》是一本专注于介绍WebWork框架的书籍,源代码的提供是为了让读者更深入地理解和实践书中的示例。WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建动态Web应用程序。它强调了代码...

    webwork.in.action中文pdf版 part5

    webwork.in.action中文pdf版 part5

    webwork in action 04

    webwork in action 第一部分:概貌 第二部分:核心内容 第三部分:内容的显示 第四部分:高级话题

    webwork.in.action中文pdf版 part7(完)

    webwork.in.action中文pdf版

    WEBWORK

    WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...

    Webwork in action

    - **核心理念**:WebWork基于“动作(Action)”的概念来构建应用程序,每个动作负责处理一个特定的用户请求。 - **请求处理流程**:用户发送请求到服务器后,请求被解析并映射到相应的动作,然后执行该动作并返回结果...

    webwork in action.

    "WebWork in Action"是一本专著,深入探讨了这个框架的各个方面,包括其设计理念、核心组件以及如何有效地利用它们来开发高效、可维护的Web应用。这本书通常会涵盖以下关键知识点: 1. **MVC架构**:WebWork遵循MVC...

    WebWork in Action 中文版 + 示例代码 part1

    真正的webwork in Action中文清晰完整版,还附有书上的示例代码,不同于其它的章节摘录版,模糊版,英文版...学习webwork的最佳教材

    webwork in action 中文版.part02.rar

    webwork in action 中文版

    webwork in action 中文版.part07.rar

    webwork in action 中文版

    webwork

    在提供的"Webwork2 Guide.pdf"文档中,你可能会学习到如何安装配置WebWork2环境,创建和运行第一个WebWork应用程序,理解Action和Interceptor的工作原理,以及如何利用WebWork的特性进行表单处理、异常管理和国际化...

    webwork in action 中文版.part03.rar

    webwork in action 中文版

    WebWork教程开发资料

    在WebWork中,这将涉及创建一个Action类,定义一个对应的动作方法,以及相应的视图模板。 **Action(动作)** Action是WebWork的核心组件,它负责接收来自用户的请求,处理业务逻辑,并决定应用程序的下一步操作。...

    webWork

    Action类通常继承自WebWork提供的基类,并包含一系列方法,每个方法对应一个用户操作。 2. Interceptors(拦截器):在Action执行前后运行的组件,用于实现通用的业务逻辑,如权限检查、日志记录等。拦截器链可以...

Global site tag (gtag.js) - Google Analytics