各种Action的实用场合

2024-03-27 09:08
文章标签 实用 action 场合

本文主要是介绍各种Action的实用场合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不同的Action类处理不同的用户请求,并不意味着一个Action类只能执行一个操作。在Action类中可以聚合多个操作。基本原则是一个Action与一个业务操作相关联。例如商品的增、删、改、查可以放到一个Action类中实现,而购物车功能不能和用户注册功能放到同一个Action类中。
Struts中预定义的Action类:
1. ForwardAction类:类似于<jsp:forward>功能,在Struts中尽量避免直接调用jsp(会失去了MVC风格),当仅仅需要从一个JSP页面到另一个JSP页面的请求转发操作时,并不需要一个真正的Action,ForwardAction类专门用于请求转发,不进行任何其他业务操作(MVC中控制器的作用),这样做的好处是控制器可以预处理请求。
具体使用ForwardAction类只需在配置文件中声明,无需编写代码:
<action
input=”/index.jsp”
name=”loginForm”
scope=”request”
validate=”false”
path=”/homepage”
type=”org.apache.struts.actions.ForwardAction”
parameter=”/shop/homepage.jsp” />
parameter属性用于指定往哪里转发。Path、type、parameter三个属性为必须,其他可忽略。
2. IncludeAction类:类似于<jsp:include>动作或Servlet中的RequestDispatcher的include()方法功能。
<action
input=”/index.jsp”
mane=”loginForm”
scope=”request”
validate=”false”
path=”/homepage”
type=”org.apache.struts.actions.IncludeAction”
parameter=”/shope/includepage.jsp” />
3. DispatchAction类:常用于在一个Action类中完成一组紧密相关的业务操作,例如增、删、改、查,可以减少重复编程。不同于一般的Action类,创建一个扩展DispatchAction类的子类时,不必覆盖execute()方法,而是创建一些实现具体业务操作的方法,这些方法和execute()方法有一样的参数和返回值,以及声明可能抛出的异常,例如:
Public final class UserAction extends DispatchAction{
Public ActionForward add(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
Throws Exception{
If(log.isDebugEnabled())
Log.debug(“Entering ‘add’ method”);
User user = new User();
User.addRole(new Role(“admin”));
UserForm userForm = (UserForm)convert(user);
updateFormBean(mapping,request,userForm);
return mapping.findForward(“edit”);
}
public ActionForward delete(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
Throws Exception{
…………….删除用户的代码写在这里。
Return mapping.findForward(“viewUsers”);
}
在配置DispatchAction类时,需要指定parameter属性为method,例如:
<action
path=”/users”
type=”包名. UserAction”
name=”userForm”
scope=”request”
input=”/userlist.jsp”
parameter=”method”
validate=”false”
>
<forward name=”edit” path=”/WEB-INF/shop/userEdit.jsp” redirect=”false”>
<forward name=”viewUsers” path=”/WEB-INF/shop/userlist.jsp” redirect=”false”>
</action>
4. LookupDispatchAction类:是DispatchAction的子类,不同之处在于DispatchAction类使用请求参数的值确定调用哪种方法,而LookupDispatchAction类利用请求参数值,反向查询资源绑定,并将它与类中的一种方法匹配。通常用于在有多个同名提交按钮的表单的场合。例如:
页面代码如下(具有相同的按钮名称“action”,但是每个按钮的值都不同):
<html:form action=”/shop/cart”>
….
<html:submit property=”action”>
<bean:message key=”cart.remove”/>
</html:submit>
….
<html:submit property=”action”>
<bean:message key=”cart.update”/>
</html:submit>
….
<html:submit property=”action”>
<bean:message key=”cart.checkout”/>
</html:submit>
</html:form>
这里提交按钮的名字action与配置文件中的parameter属性值一致。假定在资源文件中已经定义了键为cart.update和cart.checkou和cart.remove的消息资源。
配置文件如下:
<action
path=”/carts”
type=”包名.CartAction”
name=”userForm”
scope=”request”
input=”viewcart.jsp”
parameter=”action”
validate=”false”>
<forward name=”success” path=”/shop/viewcart.jsp” redirect=”false”/>
</action>
CartAction.java代码如下:(导入java.util.Map,实现方法:getKeyMethodMap())
Protected Map getKeyMethodMap(){
Map map = new Map();
Map.put(“cart.update”,”updateCart”);
Map.put(“cart.checkout”,”checkout”);
Map.put(“cart.remove”,”removeCart”);
Return map;
}
然后分别实现updateCart、checkout、removeCart方法,每种方法的方法签名与execute方法一致。
当CartAction被触发时,它根据传入按钮的值到消息资源文件中找到相应的键,再由getKeyMethodMap方法返回的Map对象映射到相应的方法。
5.AwitchAction类:主要用于在不同的模块之间切换操作,详见Struts多模块开发。

这篇关于各种Action的实用场合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851608

相关文章

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可