`
codsoul
  • 浏览: 212867 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

(转自己看)stust1中Action属性的功能浅析

    博客分类:
  • J2EE
 
阅读更多
1. 完整的action ﹤action path="/aFullAction"
type="somePackage.someActionClass"﹥
name="someForm"
input="someJSP.jsp"
﹤forward name="successful" path="someJSP.jsp"/﹥
﹤forward name="failed" path="someOtherJSP.jsp"/﹥
﹤/action﹥
首先,Struts的ActionServlet接收到一个请求,然后根据struts-config.XML的配置定位到相应的mapping(映射);接下来假如form的范围是request或在定义的范围中很难找到这个form,创建一个新的form实例;取得form实例以后,调用其reset ()方法,然后将表单中的参数放入form,假如validate属性不为false,调用validate()方法;假如validate()返回非空的ActionErrors,将会被转到input属性指定的URI,假如返回空的ActionErrors,那么执行Action的execute() 方法,根据返回的ActionForward确定目标URI。

这样做的效果是:execute()仅当validate()成功以后才执行;input属性指定的是个URI。

2. 仅有Form的action
﹤action path="/aFormOnlyAction"
type="org.apache.struts.actions.ForwardAction"
name="someForm"
input="someJSP.jsp"
parameter="someOtherJSP.jsp"
/>
首先,Struts会在定义的scope搜寻someForm,假如找到则重用,假如很难找到则新建一个实例;取得form实例以后,调用其reset()方法,然后将表单中的参数放入form,假如validate属性不为false,调用validate()方法;假如validate()返回非空的 ActionErrors,将会被转到input属性指定的URI,假如返回空的ActionErrors,那么转到parameter属性指定的目标 URI。

这样做的效果是:没有action类能够存放我们的业务逻辑,所以任何需要写入的逻辑都只能写到form的reset()或 validate()方法中。validate()的作用是验证和访问业务层。因为这里的action映射不包括forward(也没有意义),所以不能重定向,只能用默认的那个forward。这种仅有form的action能够用来处理数据获取并forward到另一个JSP来显示。

3. 仅有Action的action
﹤action path="/anActionOnlyAction"
type="somePackage.someActionClass"﹥
input="someJSP.jsp"
﹤forward name="successful" path="someJSP.jsp"/﹥
﹤forward name="failed" path="someOtherJSP.jsp"/﹥
﹤/action﹥
首先,ActionServlet接收到请求后,取得action类实例,调用execute()方法;然后根据返回的ActionForward在配置中找forward,forward到指定的URI或action。

这样做的效果是:没有form实例被传入execute()方法,于是execute()必须自己从请求中获取参数。Action能够被forward或重定向。这种action不能处理通过HTML FORM提交的请求,只能处理链接式的请求。

4. 仅有JSP的action
﹤action path="/aJSPOnlyAction"
type="org.apache.struts.actions.ForwardAction"
parameter="someOtherJSP.jsp"
/﹥
首先,ActionServlet接到请求后调用ForwardAction的execute()方法,execute()根据配置的parameter属性值来forward到那个URI。

这样做的效果是:没有任何form被实例化,比较现实的情形可能是form在request更高级别的范围中定义;或这个action被用作在应用程式编译好后充当系统参数,只需要更改这个配置文档而无需重新编译系统。

5. 两个action对应一个form
﹤action path="/anAction"
type="somePackage.someActionClass"﹥
name="someForm"
input="someJSP.jsp"
﹤forward name="successful" path="/anotherAction.do"/﹥
﹤/action﹥
﹤action path="/anotherAction"
type="somePackage.someOtherActionClass"﹥
name="someForm"
input="someOtherJSP.jsp"
﹤forward name="successful" path="someResultJSP.jsp"/﹥
﹤/action﹥
就每个单独的action来讲,处理上并没有和完整的action有什么实质的区分。这个组合模式能够被用来传递命令对象(form)。需要注意的是在后一个action中同样会调用form的reset()和validate()方法,因此我们必须确保form中的信息不被重写。

处理的方式大致分为两种:

a) 在request中放入一个指示器表明前一个action有意向后一个action传递form,从而在后一个action能够保留那个form中的值,这一方式只能在使用forward时使用。b) 当使用redirect而不是forward时,能够把指示器放在session或更高的级别,在命令链的最后一环将这个指示器清除。

﹤action path="/anAction"
type="somePackage.someActionClass"﹥
name="someForm"
input="someJSP.jsp"
﹤forward name="successful" path="/anotherAction.do" redirect="true"/﹥
﹤/action﹥
﹤action path="/anotherAction"
type="somePackage.someOtherActionClass"﹥"
name="someOtherForm"
input="someOtherJSP.jsp"
﹤forward name="successful" path="someResultJSP.jsp"/﹥
﹤/action﹥
这个组合方式跟前一种在流程上没有太大区分,只是我们现在对于两个action分别提供了form,于是代码看上去更加清楚。于是我们能够分别处理Web应用程式的输入和输出。值得注意的是,后一个action同样会尝试往form中写入那些参数,但是我们能够这样处理:

a) 在后一个form中使用另一套属性名;

b) 只提供getter而不提供setter.

大致的处理是这样:

前一个action接收输入、验证、然后将数据写入业务层或持久层,重定向到后一个action,后一个action手动的从业务层/持久层取出数据,写入form(通过其他方式),交给前台JSP显示。

这样做的好处是不必保留输入form中的值,因此能够使用redirect而不是forward.这样就降低了两个action之间的耦合度,同时也避免了不必要的重复提交。
分享到:
评论

相关推荐

    JavaScript获取网页表单action属性的方法

    JavaScript获取网页表单的action属性是一种常用的操作,通常用于获取表单提交时要发送到的URL地址。在Web开发中,表单是用来收集用户输入数据并将其发送到服务器的HTML元素。action属性指定了表单提交后,服务器处理...

    web_xml中ActionServlet中的属性

    以下是对`web.xml`中`ActionServlet`属性的详细解释: 1. **config**: 此属性定义了Struts配置文件的位置。默认值是`config/${prefix}/WEB-INF/strutsconfig.xml`,其中`${prefix}`是应用模块的前缀。这个文件包含...

    Intent总结03 Action属性

    本文将深入探讨Intent中的Action属性,包括如何使用自定义Action和系统内置的Action。 一、Intent的基本结构 Intent由两部分组成:Action、Data、Category、Component和其他额外的数据。Action是Intent的核心部分...

    Struts1工作原理浅析【转】

    Struts1 工作原理浅析 一、Struts1 工作原理概述 Struts1 是一个基于 MVC 模式的 Web 应用框架,它的工作原理可以分为三个部分:Model、View 和 Controller。Model 负责处理业务逻辑,View 负责表现层,Controller...

    Struts2--为Action的属性注入值

    总结起来,Struts2的Action属性注入值功能是通过OGNL和拦截器实现的,极大地提高了开发效率和代码的可维护性。开发者只需要关注业务逻辑,无需手动处理请求参数的绑定。这种特性使得Struts2成为构建Web应用的有力...

    使用struts2的标签,在页面上用列表的方式列出action里集合中所有元素的所有属性值

    在上述代码中,`collectionName`应替换为Action中集合变量的实际名称,`property1`和`property2`则分别替换为集合元素的属性名。`<s:iterator>`标签会遍历集合中的每个元素,并为每个元素创建一个新的上下文,使得...

    Struts2中Action接收参数的方法

    例如,在 Action 中定义了 `userName` 属性,可以在 JSP 页面中使用 `user1!add?userName=Magci` 的方式将参数传递给 Action。 使用 DomainModel 接收参数 DomainModel 是 Struts2 中的一种模型对象,可以用来接收...

    java图形编程:Action接口(Swing新增功能)专题借鉴.pdf

    使用 Action 来设置这些属性的好处就是可以做到统一,比如对于具有相同功能的菜单项和工具条上的按钮,你可以使用同一个 Action 来设置他们的图标和标签,这样,工具条按钮和菜单项就具有了相同的图标和文本,同时...

    表单中有name为action的元素时,取form的属性action杯具了

    然而,如果在表单内部存在一个名为`action`的输入元素(例如`<input>`或`<button>`),这可能会引发一些意外的行为,正如标题“表单中有name为action的元素时,取form的属性action杯具了”所描述的问题。 当我们...

    Action的常用配置

    当应用变得复杂,Action数量增多时,可以将一个大的struts.xml拆分成多个小的配置文件,比如struts-mod1.xml,然后在主配置文件struts.xml中使用`<include>`标签来包含这些分模块的配置,这样可以实现配置文件的模块...

    实现struts框架简单功能

    在这个配置中,`name`属性定义了Action的名称,`class`属性指定了Action的Java类,`result`元素定义了Action执行后的跳转页面。 现在,我们讨论如何传递和接收客户端的数据。Struts2支持自动类型转换,可以方便地将...

    基于J2EE的开发技术 - 实验项目1 - Action的实现与配置

    在这个实验项目中,我们主要探讨了Action的实现与配置,分为两个不同的web应用,actionApp1和actionApp2。 对于actionApp1,我们需要创建两个Action类,Login.Action和Regist.Action,这两个类分别对应用户的登录和...

    android全部UI属性及注释说明总结 全部Action大全总结

    本篇文章将深入探讨Android UI属性以及Action的全面总结,帮助开发者更好地理解和掌握这些关键知识点。 首先,我们来了解一下Android UI属性。Android UI主要是通过XML布局文件进行设计的,其中包含了众多属性用于...

    Spring In Action 属性注入

    本文将深入探讨Spring中的属性注入,以帮助开发者更好地理解和运用这一关键功能。 一、属性注入的概念与类型 属性注入是Spring框架的核心特性之一,它通过容器来控制对象的创建和初始化,而不是由对象自己管理其...

    浅析一个表单多个Submit按钮的简单实现方法.pdf

    通过使用JavaScript函数、HTML的Form标记中的action属性和服务器端的语言,我们可以轻松地实现这些功能。 本文提供了一个详细的解决方案来实现一个表单中多个Submit按钮的功能,帮助读者更好地掌握Web开发中的这个...

    struts1属性详解

    Struts 1是一个经典的MVC框架,用于构建Java Web应用程序。...总之,`struts1.x_action`属性的配置是Struts 1中控制应用程序流程的关键。理解并正确配置这些属性能够确保用户请求的正确处理和数据的有效验证。

    Action与Forward属性的含义

    Action与Forward属性的含义

    PyQt(Python+Qt)学习随笔:Action功能详解及Designer中的操作方法.rar

    本篇文章将深入探讨PyQt中Action的功能及其在Qt Designer中的操作方法。 Action在PyQt中可以被理解为一种用户界面元素的行为或动作,它通常与菜单项、工具栏按钮或者状态栏的文本关联,用于响应用户的交互。Action...

Global site tag (gtag.js) - Google Analytics