SSH:Struts1框架(几种常用的Action)

原创 2015年11月19日 12:37:25

除了基本的Action 之外, Struts 还提供了几个其他类型的Action ,这些Action 大大 丰富了Struts 的功能。下面介绍如下儿个常用的Action 。
• DispatchAction: 能同时完成多个Action 功能的Action 。
• ForwardActon: 该类用来整合Struts 和其他业务逻辑组件,通常只对请求作有效 性检查。
• IncludeAction: 用于引入其他的资源和页面。
• LookupDispatchAction: DispatchAction 的子类,根据按钮的key ,控制转发给action 的方法。
• MappingDispatchAction: DispatchAction 的子类,一个action 可映射出多个Action 地址。
• SwitchAction: 用于从一个模块转换至另一个模块,如果应用分成多个模块时, 就可以使用SwitchAction 完成模块之间的切换。
下面对常用的Action 进行介绍。

 
1 DispatchAction 及其子类


DispatchAction 是仅次于Action,使用最频繁的Action。用于同一个表单中有两个提交按钮时,但提交需要的逻辑处理完全不同的情况。如登录页面。

 两个提交按钮的表单页 该页面包含了两个提交按钮,但提交按钮需要执行的逻辑却不一样。最容易想到的解决方法是,为每个按钮增加JavaScipt脚本,提交两个按钮时候分别提交给不同的Action 处理。这是最容易想到,也最麻烦的方式。
Struts 提供了DispatchAction,可支持多个逻辑处理。对于上面的示例,表单需要两个逻辑处理:增加和修改。下面是示例所使用的Action 类的源代码:
public class LoginAction extends DispatchAction
{
II 第一个处理逻辑
public ActionForward add(ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response)
throws Exception
System.out.println( "增加") ;
request. setAttribute ("method" , "增加") ;
return mapping.findForward("success");
II第二个处理逻辑
public ActionForward modify(Act工o nMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response)
throws Exception
System.out.println(" 修改") ;
request. setAttribute ("method,"修改") ;
return mapping.findForward("success"};
上面的Action 非常简单,其两个逻辑处理也非常简单。该Action 并没有重写execute方法,而是书写了两个自定义的方法:add 和modify方法。这两个方法除了方法名与execute 方法不同之外,其他的参数列表及异常的处理完全相同。这两个方法正是execute 方法的替代,用于完成业务逻辑的处理。
问题的关键是: Struts 如何区别不同表单提交与方法之间的对应关系?因为当使用DispatchAction 要求表单提交时,会额外多传递一个参数,该参数用于区分到底调用
Action 中的哪个方法。
这个参数名在struts-config.xml 文件中指定。注意下面action 的配置代码:
<action path="/login" type="com.***.LoginAction“

name="loginForm" scope="request" validate="true" input="/logig.jsp"

parameter="method"

>
<forward name="success" path="/welcome.jsp"/>
<faction>
在该action 的配置中,增加了parameter属性,该属性用于指定参数名,即Struts 将根据该参数的值调用对应的方法。为了让请求增加method 的参数,对上面的JSP 页面代码进行简单修改,可在JSP 页面中增加一个隐藏域,使该隐藏域的名字为method。下面是JSP 页面的表单代码:
<html:form action="login.do">
<table border="O" width="100革">
<tr>
<th align="left"><bean:message key="username"/></th>
<td align="left"><html:text property="username" size="15"/></td>
</tr>
<tr>
<th align="left"><bean:message key="pass"/></th>
<td align="left"><html:text property="pass" size="15"/></td>
</tr>
<tr>
<td>
<input type="hidden" name="method" value="add"/>
<input type="submit" value='<bean:message key="button.add"/> onClick="
method.value='add'''/>
<input type="submit" value='<bean:message key="button.modify"/>'
onClick="method.value='modify'''/>
<input type="reset" value='<bean:message key="button.reset"/>'/>
<ltd>
</tr>
</table>
</html:form>
从上面的代码中可以看到,页面中增加了method 的隐藏域,该隐藏域的默认值为add,当单击页面中的【修改】按钮时,该隐藏域的值将变成modify,单击【添加】按钮时,该隐藏域的值变成add。这个隐藏域就是额外传递的参数值,用于告诉Dispatch调用哪个方法来处理请求。
如果method 参数的值为add,将调用add 方法;如果method 参数的值为modify,则调用modify 方法。因此在单击不同按钮时,DispatchAction将可自动调用对应的方法来完成处理。

 
2. 使用MappingDispatchAction


MappingDispatchAction可将同一个Action 的不同方法映射成多个Action URI ,这种

Action 的写法与DispatchAction 非常相似,同样不需要重写execute 方法,而是将书写多个自定义的方法。这些方法除了方法名与execute 方法不同外,其他的参数列表及异常处理完全一样。
下面是本示例所使用的Action 的源代码:

public class LoginAct工on extends MappingDispatchAction
I 第一个处理逻辑
public ActionForward add(ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse respo口se)
throws Exception
System.out.println("增加") ;
request.setAttribute( method" , "增加") ;
return mapping.findForward("success");
}
II 第二个处理逻辑
public ActionForward modify(ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response)
throws Exception
System.out.println("修改") ;
request.setAttribute( "method" ,"修改") ;
return mapping.findForward("success");
该Action 与前面的DispatchAction 没有太大的区别,仅仅改变它的父类:
MappingDispatchAction,但变化在于该Action 的配置,看下面关于该Action 的配置代码:


<1- 配置第一个Action. 实现类是com.***.LoginAction , parameter 为add-->
<action path="/add" type="com.***.LoginAction" name="loginForm"
scope="request" validate="true" input="logig.jsp"

 parameter="add">
<forward name="success" path="/welcome.jsp"l>
</action>
<! 配置第二个Action. 实现类是lee.LoginAction , parameter 为modify-->
<action path="/modify" type="com.***.LoginAction" name="log工口Formll
scope工"request" validate="true" input="login.jsp

 parameter="modify">
<forward name="success" path="/welcome.jsp">
</action>
在这种情况下,两个action 使用的是同一个Action 处理类,只是调用的方法不同,同样也可达到上面的效果。当然也需要为页面中的两个按钮增加相应的JavaScript脚本,当单击不同按钮时,表单可提交到不同的action,下面是JSP 页面三个按钮的源代码:
<td>
<input type="submit" value='<bean:message key="button.add"/>
onClick="document.loginForm.action='add.do'''/>
<input type="submit" value='<bea口:message key="button.modify">
onClick="document.loginForm.action='modify.do'''>
<input type="reset" value='<bean:message key="button.reset">>
<ltd>
其中,前面两个提交按钮都增加了onClick 方法,即单击该按钮时,会改变表单的提交地址。

注意:使用MappingDispatchAction 并没有带来太大的优势,系统完全可以书写两个Action ,分别定义两个不同的action 映射,而其他部分没有区别。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

SSH框架(三) 常用WEB框架Struts1、Struts2和Spring MVC三者的区别

二:Struts1.x   A配置:  1 导入struts1.x的jar包到web-inf/lib下面  2 在web-inf目录下新建struts-config.xml文...

struts1中几种常用的Action

除了基本的Action 之外, Struts 还提供了几个其他类型的Action ,这些Action 大大 丰富了Struts 的功能。下面介绍如下儿个常用的Action 。 • DispatchA...

自学SSH框架之---struts(三):源码分析struts1如何实现Action单例模式

      今天想说的是struts1和struts2的一个区别,就是Struts1 Action是单例模式并且必须是线程安全的,而Struts2 Action对象为每一个请求产生一个实例,因此没有线...

Struts1框架学习(六)--业务分发器ActionServlet和业务具体处理组件Action

1、ActionServlet是做什么的?     我们知道Struts1框架的核心是一个基于MVC模型的控制器,这个控制器是由ActionServlet类实现的 。     ActionSer...

SSH:Struts1框架(动态ActionForm)

使用ActionForm可以给开发者在处理HTML表单时带来极大的帮助,它简化了代码的编写,并提供了自动的数据验证。但是,ActionForm也存在几个非常明显的缺点。  首先,如果ActionFo...

SSH:Struts1框架(简介)

Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准。S...

SSH:Struts1框架(ActionForm注册类型自动转换)

测试ActionForm注册类型自动转换  * 一般的数据类型都可以自动进行转换; * boolean:yes,1,on,true都会转换成True类型,而且忽略大小写,其他清空转换成false ...

SSH:Struts1框架(创建HelloWorld应用)

1、配置struts * 拷贝struts lib下的所有jar到WEB-INF/lib下,如下所示: * 修改web.xml文件,配置ActionServlet,引入struts的配置文件,...

SSH:Struts1框架(标签的使用)

1. Struts视图组件 Struts框架的视图负责为客户提供动态网页内容。Struts视图主要由Jsp页面构成。此外,Struts视图组件还提供了Struts标签,这些组件提供对国际化、接收用户输...

自学SSH框架之---struts(四):struts1数据验证方面简介

如题,本节主要记录了一下自己学习数据验证(Validator)方面的内容1 先说下利用struts的插件 Validator plugin来进行验证利用插件的话,得需要在struts-config.x...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSH:Struts1框架(几种常用的Action)
举报原因:
原因补充:

(最多只允许输入30个字)