Struts预定义的Action类(转载)
来源:互联网 发布:心蓝抢票软件手机版 编辑:程序博客网 时间:2024/05/17 05:02
(转载)
是份额
DispatchAction类(org.apache.struts.actions.DispatchAction)
DispatchAction类是Action类的子类,他提供了有实现的execute方法。
我们写的自定义Action类,可以继承DispatchAction类,但不要覆盖execute方法,可以在自定义类中写反回值和参数表都与execute方法相同的方法,可以通过在struts-congfig.xml中为这个action的配置中添加一个参数,来判断调哪一个方法,实际上DispatchAction类就是通过反射机制,通过form中参数调用了自定义Action中的方法,当然这些方法的定义要符合规范,使用继承DispatchAction类的自定义的Action类,也就会共享同一的Action路径。
注意:使用继承DispatchAction类的自定义的Action,只会匹配一个action路径,只能共享一个ActionForm,如果加上校验,会产生form表单的参数不一致的情况,会导致校验无法通过。
使用:在定义action时 指定 方法名参数 parameter
这样dispatchAction 会调用parameter参数的值的方法
public class MyAction extends DispatchAction{
ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse response ActionMapping mapping) throws Exception
{
return mapping.findForward("sucess")
}
}
<action path="/add" type="MyAction" parameter="methodName">
<!--parameter属性是和form中隐藏域的名字相对应的-->
<forward name="sucess" path="/sucess.jsp"/>
</action>
<from action="add.do" method="post">
<input type="hidden" name="methodName" value="add"/>
<!--
使用隐藏域为struts传递要调用自定义Action中方法的方法名,是通过与struts-config.xml
中action标签中的parameter和name属性相对应来获取隐藏域的value。
-->
<input type="submit" value="submit"/>
</from>
MappingDispatchAction类(org.apache.struts.actions.MappingDispatchAction)
MappingDispatchAction类是DispatchAction的子类,他和DispatchAction不同点就是可以去匹配多个action路径,这样也就是结决了共用ActoinForm的校验问题了,多个Action的路径使用同一的自定义Action类,这样就不用共享同一个ActionForm,也就不会有校验问题了。
使用: 将一个Action类 配置多个action,使用parameter来指定该action调用的方法,
public class MyAction extends MappingDispatchAction{
ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse response ActionMapping mapping) throws Exception
{
return mapping.findForward("add")
}
ActionForward del(ActionForm form,HttpServletRequest request,HttpServletResponse response ActionMapping mapping) throws Exception
{
return mapping.findForward("del")
}
}
<action path="/add" type="MyAction" parameter="add">
<!--parameter属性是指定调用方法的名字-->
<forward name="add" path="/add.jsp"/>
</action>
<action path="/del" type="MyAction" parameter="del">
<forward name="del" path="/del.jsp"/>
</action>
在JSP页面中也不用在使用隐藏域传递参数,直接在form中的action中就可以直接使用xxx.do匹配了。
<form action="add.do" method="post">
<input type="submit" value="submit"/>
</form>
<form action="del.do" method="post">
<input type="submit" value="submit"/>
</form>
LookupDispatchAction(org.apache.struts.actions.LookupDispatchAction)
LookupDispatchAction类也是DispatchAction类的子类,他所实现的功能是解决一个表单多种提交问题的
,他是通过使用资源文件,用submit按钮的value来作为资源文件中的key所对应的值,通过这个值来找到对用的key,在使用这个key来获得指定Map中所对应的值,这个值就是要调用的方法名。
submit的value---->MessageResource.properties中的key----->Map中key对相应的值---->action
<form method="post" action="${pageContext.request.contextPath}/lookup/adddel.do">
<input type="submit" value="<bean:message key="button.add" />" name="methodName">
<!--注意name="methodName"是和strut-config.xml中action标签中的parameter属性-->
<input type="submit" value="<bean:message key="button.delete" />" name="methodName">
</form>
MessageResource.properties
button.add=add new user
button.delete=delete user
注意:在继承LookupDispatchAction时,要覆盖getKeyMethodMap()方法,并定义Map,向Map中放入指定的键值对。
public class AddDelLookupDispatchAction extends LookupDispatchAction
{
public Map getKeyMethodMap(){
Map keyMethodMap= new HashMap();
keyMethodMap.put("button.add", "add");
keyMethodMap.put("button.delete", "delete");
return keyMethodMap;
}
public ActionForward add(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response) throws Exception
{
return mapping.findForward("add");
}
public ActionForward delete(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response) throws Exception
{
return mapping.findForward("delete");
}
}
<action path="/lookup/adddel" type="alan.struts.actions.AddDelLookupDispatchAction"
parameter="methodName">
<forward name="add" path="/add.jsp"/>
<forward name="delete" path="/delete.jsp" />
</action>
<message-resources parameter="alan.struts.message.MessageResource" />
EventDispatchAction
public class EventDispatchAction extends DispatchAction
通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性指定多个动作,中间用逗号(,)分隔。每个动作实际上就是<html:submit>标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。
struts-config.xml:
input="/subscription.jsp" parameter="save,back,recalc=recalculate,default=save"/>
<%@ page pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title>多提交演示</title>
</head>
<body>
<html:form action="subscription">
<html:submit property="save" value="保存"/>
<html:submit property="back" value="后退"/>
<html:submit property="recalc" value="重新计算"/>
</html:form>
</body>
</html>
自定义的Action类的一些规则
1,尽量不要在Action类中使用(静态)成员变量,如果使用要加上同步。
2,尽量使各模块间的耦合性降低,最大限度的针对接口编程。
3,可以将共代码方在覆盖父类的方法中,最后可以用super.xxx(xxx)来调用父类的方法,使用父类的实现,并加上了自定义的功能。
- Struts预定义的Action类(转载)
- Struts预定义的三种重要Action类
- Struts预定义的三种重要Action类
- Struts预定义的三种重要Action类
- Struts预定义的三种重要Action类
- 使用C#预定义的Action
- Struts的Action类
- 关于VC预定义常量_WIN32,WIN32,_WIN64等预定义宏的介绍(整理、转载)
- .Net类库预定义委托之Action
- [转载]预处理器的预定义宏大全
- 【Struts】Action 2 action类
- struts中Action类的国际化
- 介绍一下Struts的Action类
- struts中几种常用的Action(一)
- struts中几种常用的Action(二)
- struts【2】(action的配置--通配符)
- Struts的action理解
- Struts常用的Action
- jar文件不存在maven的中央文件仓库的处理方法
- 搜索引擎成玩家账号被盗最佳帮凶
- Struts2学习--很精辟
- 35岁前对职业生涯有帮助的10条
- Struts预定义的Action类(转载)
- 坚持不懈
- 搜源网 (一个国内非常优秀的源代码搜索引擎)
- RTMP协议研究
- 敬佩
- 漂亮的信纸1
- 赤壁之战孙权拒曹--老板不是一般人
- 管理观察杂志 管理观察
- 国内软件测试中文书籍大全