`

Struts中action跳转种类

阅读更多
Struts中action跳转种类
关键字: action种类
1、完整的action

Java代码
<action path="/aFullAction"type="somePackage.someActionClass">name="someForm"input="someJSP.jsp"<forward name="successful" path="someJSP.jsp"/><forward name="failed" path="someOtherJSP.jsp"/></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

Java代码
<action path="/aFormOnlyAction"type="org.apache.struts.actions.ForwardAction"name="someForm"input="someJSP.jsp"parameter="someOtherJSP.jsp"/>  

<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

Java代码
<action path="/anActionOnlyAction"type="somePackage.someActionClass">input="someJSP.jsp"<forward name="successful" path="someJSP.jsp"/><forward name="failed" path="someOtherJSP.jsp"/></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

Java代码
<action path="/aJSPOnlyAction"type="org.apache.struts.actions.ForwardAction"parameter="someOtherJSP.jsp"/> 

<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

Java代码
<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 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或更高的级别,在命令链的最后一环将这个指示器清除。

Java代码
<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 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之间的耦合度,同时也避免了不必要的重复提交。
分享到:
评论

相关推荐

    struts2 action跳转action传参数

    action跳转后的页面接收由上一个ACTION传过来的参数

    一个struts的action跳转大全

    首先,Struts的ActionServlet接收到一个请求,然后根据struts-config.xml的配置定位到相应的mapping (映射);接下来如果form的范围是request或者在定义的范围中找不到这个form,创建一个新的form实例;取得form...

    Struts2从一个带参数action跳转到另一个action

    资源中示例了一个struts2的配置文件中配置的action的result结果为另外一个action的配置,该跳转的过程中是带所有参赛调整的,在另外一个action中可以接受到当前action的所有参数,此配置文件是我日常开发中的经验...

    JS调用Struts中的Action

    JS调用Struts中的ActionJS调用Struts中的ActionJS调用Struts中的Action

    我的笔记:Struts构架中action的跳转大全

    我的笔记:Struts构架中action的跳转大全

    struts2 action跳转调用另一个程序

    目的:主要为了在一个Action成功后跳转调用另一个程序。 Struts2.xml [html] 代码如下: &lt;?xml version=”1.0″ encoding=”UTF-8″?&gt; &lt;!DOCTYPE struts PUBLIC “-//Apache Software Foundation//DTD ...

    Struts2操作同一action的不同方法跳转jar包(包括示例代码)

    Struts2操作同一action的不同方法跳转jar包(包括示例代码) 使用“项目名/类名!方法名.action”

    struts2如何实现弹出action返回的错误信息

    struts2如何实现弹出action返回的错误信息

    struts 1.2 跳转后css或js 无效解决方法

    struts 1.2 跳转后css或js 无效解决方法,不是重定向处理,可以正常使用你的action 或css 或js

    STRUTS2跳转示意图

    STRUTS2配置相信许多人都会抄, 我只好说一下它的跳转路径了,附图

    struts1直接跳转到jsp-无action的url

    NULL 博文链接:https://fsh430623.iteye.com/blog/1328665

    Struts 2.1.8_学习源码

    Struts2_04ActionResultType : Struts2关于Action跳转类型的应用 对各种不同的跳转类型使用的实例 Struts2_05Interceptor : Struts2拦截器的使用 Struts2_06FileUpload : Struts2上传文件的使用

    Struts2全解Struts2全解

    Namespace、自定义Action、路径问题、通配符、包含模块配置文件、默认Action、接受用户输入、服务器跳转、Action中访问web元素、简单数据校验、调用Action的自定义方法 5struts2国际化 ......... 6 struts2输入校验...

    Struts2项目开发流程简明实例

    功能:  在登录页面login.jsp中输入用户名admim和密码123456后,单击登录按钮后跳转到success.jsp页面;  否则页面跳转到login.jsp页面等待用户输入;...6. 创建struts.xml配置Action 7. 部署和运行struts2项目

    struts2获取参数,解决乱码,跳转

    NULL 博文链接:https://lipeixiaoyu.iteye.com/blog/626185

    javaWeb_struts2框架实现简单用户注册登录

    3.控制器采用action开发,替代传统的servlet,直接跳转页面返回一个字符串即可,需配置struts.xml对应的jsp。 4.struts2,可以直接对表单提交的数据封装成对象,简洁!当然需要在web.xml中配置核心filter—...

    struts标签库

    面并显示其内容,现在利用Struts 2的action标签,可以直接在页面发出该请求,并 在发送请求的页面显示“success.jsp”的内容,页面并没有跳转到“success.jsp”。 调用action标签页面action.jsp的代码为: ...

    Struts2常用标签的使用以及Action传值

    Struts2表单标签的应用实例。 主要功能是在一个页面提交个人信息之后跳转到另一个页面显示之前所提交的个人信息。具体介绍和功能演示请移步我的博客: http://blog.csdn.net/qq_33171970/article/details/51380991

    struts1流程和原理

    struts1的几个核心组件是值得我们注意的: 1 、ActionServlet(核心控制器)。 2、RequestProcessor类(处理... 5、ActionForward(页面跳转,跳转到jsp组件)。  6、ActionMapping(配置每个Action所对应的映射关系)。

Global site tag (gtag.js) - Google Analytics