一. 由来
最近用Struts1.x做项目时遇到个问题,对一个表做操作,增删改查什么的,需要定义很多Action对应相应的操作,假如有4个jsp,分别是
user表的增删改查页,理论上就要有4个增删改查Action,一个jsp对应一个Action,夸张了些吧。。。,另一种方法是写4个jsp,每个
jsp中写一个隐藏域,Action只写一个,4个jsp都提交的这个Action,在Action里,取出隐藏域的值来判断是由哪个jsp提交过来的,
这种方法貌似也不是太好,因为会造成execute方法太长了,很恶心人。
查了孙维琴的书,原来Struts.x早就有解决方案了——DispatchAction
。
二. DispatchAction的使用
恩,虽然是从孙维琴的书上抄下来的,但是看看吧,就算给自己连手了。
正文如下:
通常,在一个Action类中只能完成一种业务操作,如果希望在同一个Action类中完成一组相关的业务操作,可以使用DispatchAction
类。例如,与购物车相关的业务操作包括:查看购物车、添加商品、修改商品及数量等。一种设计方案是为每种业务操作创建独立的Action类,如
AddItemAction、ViewShoppingCartAction和UpdateShoppingCartAction。尽管这种设计方案是可
行的,但是这三个Action在执行各自的任务中,可能会执行一些相同的操作。
为了减少重复编程,使应用更加便于维护,可以由同一个Action类来完成一组相关的业务操作,DispatchAction类就提供了这种功能。
创建一个扩展DispatchAction类的子类,不必覆盖execute()方法,而是创建一些实现实际业务操作的方法,这些业务方法都应该和
execute()方法具有同样的方法签名,即它们的参数和返回类型都应该相同,此外也应该声明抛出的Exception异常。例程5-6是一个扩展
DispatchAction的例子。
例程5-6 ShoppingCartActions.java
package
netstore.order;
public class
ShoppingCartActions extends NetstoreDispatchAction{
public ActionForward view(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
Exception {
SessionContainer sessionContainer=getSessionContainer(request);
return mapping.findForward(IConstants.SUCCESS_KEY);
}
public
ActionForward update(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
Exception {
updateItems(request);
updateQuantitis(request);
return mapping.findForward(IConstants.SUCCESS_KEY);
}
public ActionForward addItem(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
Exception {
String itemId = request.getParameter(IConstants.ID_KEY);
ItemDetailView itemDetailView =
serviceImpl.getItemDetailView(itemId);
}
如上所示:在DispatchAction中定义了三个方法view、update、addItem方法,这三个方法的签名与execute相同。那么当jsp提交到这个Action中使struts是怎么知道调用哪个方法呢???
在配置DispatchAction类时,需要把parameter属性设置为“method”,以下是ShoppingCartActions类的配置代码:
< path="/cart">
type="netstore.order.ShoppingCartActions"
scope="request"
input="/order/shoppingcart.jsp"
validate="false"
parameter="method"
>
把parameter的属性设置为"method"后,当用户请求访问DispatchAction时,应该提供method请求参数,例如:
http://localhost:8080/nestore/action/cart?method=addItem&id=2
以上method请求参数值为"addItem",它指定了需要调用的业务方法,因此DispatchAction将调用相应的addItem()方法。
分享到:
相关推荐
一个比较简单的struts的dispatchAction 类的入门案例,适合初学者理解dispatchAction
在页面中用js传递执行方法参数,传递到后台执行, 在你用的Action类中的方法名前加“run“及可被调用。
自习struts时做时,大家可以互相交流一下
11.2.6 DispatchAction(多动作控制器) 11.3 利用Struts实现用户登录的示例 11.6.1 编写实现登录的页面login.jsp 11.6.2 编写存储登录用户信息的类User.java 11.6.3 编写控制器LoginAction.java 11.6.4 配置Struts...
11.2.6 DispatchAction(多动作控制器) 11.3 利用Struts实现用户登录的示例 11.6.1 编写实现登录的页面login.jsp 11.6.2 编写存储登录用户信息的类User.java 11.6.3 编写控制器LoginAction.java 11.6.4 配置Struts...
11.2.6 DispatchAction(多动作控制器) 11.3 利用Struts实现用户登录的示例 11.6.1 编写实现登录的页面login.jsp 11.6.2 编写存储登录用户信息的类User.java 11.6.3 编写控制器LoginAction.java 11.6.4 配置Struts...
11.2.6 DispatchAction(多动作控制器) 11.3 利用Struts实现用户登录的示例 11.6.1 编写实现登录的页面login.jsp 11.6.2 编写存储登录用户信息的类User.java 11.6.3 编写控制器LoginAction.java 11.6.4 配置Struts...
9.1 Struts内置类DispatchAction 13 9.2 Struts内置类ForwardAction 13 9.3 Struts令牌机制,防止重复提交 13 9.4 StrutsAction单态陷阱,请谨慎使用全局变量 13 9.5 Struts异常处理 13 第10章 struts中使用国际化...
多个submit的特殊应用。通常选择dispatchaction,当然Struts2应该都可以解决。
使用本地切片一个自以为是的React钩子,将减速器用于本地状态以类型安全的方式使用来自类的API 与集成如何使用它 const [ state , dispatchAction ] = useLocalSlice ( { slice : "my slice" , // optional - will ...
1.12. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 6 1.13. Hibernate的查询方式 7 1.14. 如何优化Hibernate? 7 2 Struts部分 7 4.1. Struts1.x工作机制? 7 4.2. 为什么要用Struts1.x 8 4.3. ...
如果有多个映射文件需要声明,使用类路径映射方式显然比直接单独指定映射文件名的方式要简便。 第27~30行定义了Spring代理Hibernate数据操作的HibernateTemplate模板,而第32~34行将该模板注入到tfileDAO中。 ...
struts1.2 图片文件上传(单个/动态多个) 单个的采用通用Action 需要ActionForm的,而动态多个上传是采用动态代理类(DispatchAction) 希望对大家有用,另JSP在IE测试通过,JS我就不再处理了!
17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 18.2、...
17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 ...
17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 18.2、...
17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 18.2、...
17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 ...
17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 18.2、...
17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 ...