各种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

相关文章

Unable to instantiate Action, goodsTypeAction, defined for 'goodsType_findAdvanced' in namespace '/

报错: Unable to instantiate Action, goodsTypeAction,  defined for 'goodsType_findAdvanced' in namespace '/'goodsTypeAction......... Caused by: java.lang.ClassNotFoundException: goodsTypeAction.......

用ajax json给后台action传数据要注意的问题

必须要有get和set方法   1 action中定义bean变量,注意写get和set方法 2 js中写ajax方法,传json类型数据 3 配置action在struts2中

使用http-request 属性替代action绑定上传URL

在 Element UI 的 <el-upload> 组件中,如果你需要为上传的 HTTP 请求添加自定义的请求头(例如,为了通过身份验证或满足服务器端的特定要求),你不能直接在 <el-upload> 组件的属性中设置这些请求头。但是,你可以通过 http-request 属性来自定义上传的行为,包括设置请求头。 http-request 属性允许你完全控制上传的行为,包括如何构建请求、发送请

如何将卷积神经网络(CNN)应用于医学图像分析:从分类到分割和检测的实用指南

引言 在现代医疗领域,医学图像已经成为疾病诊断和治疗规划的重要工具。医学图像的类型繁多,包括但不限于X射线、CT(计算机断层扫描)、MRI(磁共振成像)和超声图像。这些图像提供了对身体内部结构的详细视图,有助于医生在进行准确诊断和制定个性化治疗方案时获取关键的信息。 1. 医学图像分析的挑战 医学图像分析面临诸多挑战,其中包括: 图像数据的复杂性:医学图像通常具有高维度和复杂的结构

ubuntu终端实用指令

ctrl + w 往回删除一个单词,光标放在最末尾 ctrl + u 删除光标以前的字符 ctrl + k 删除光标以后的字符 ctrl + a 移动光标至的字符头 ctrl + e 移动光标至的字符尾 ctrl + shift + c 复制 ctrl + shift + v 粘贴 ctrl + l 清屏

【Git 学习笔记_24】Git 使用冷门操作技巧(四)——更多实用 git 别名设置、交互式新增提交

文章目录 11.8 更多别名设置别名1:只查看当前分支(git b)别名2:以图表形式显示自定义格式的 git 日志(git graph)别名3:查看由于合并分支导致的冲突后仍有冲突的、待合并的文件列表(git unmerged)别名4:查看 git 状态(git st)别名5:查看 git 简要状态(git s)别名6:查看最新版本的统计信息(git l1)别名7:查看最近 5 个版本的提

鹰眼雾炮适合在哪些场合使用

朗观视觉鹰眼雾炮由于其独特的功能和优势,适合在多种场合使用,主要包括但不限于以下几个方面: 建筑工地:建筑工地是粉尘污染的主要来源之一。鹰眼雾炮可以有效降低施工过程中的扬尘,改善工地及周边空气质量,保护工人和周边居民的健康。 采矿场和堆场:这些场所往往存在大量的粉尘和颗粒物,对环境和人体健康构成威胁。鹰眼雾炮能够精确控制喷雾范围,有效抑制粉尘扩散,减少环境污染。 港口码头:港口码头是货

50个实用的jquery案例

1. 如何创建嵌套的过滤器: //允许你减少集合中的匹配元素的过滤器,   //只剩下那些与给定的选择器匹配的部分。在这种情况下,   //查询删除了任何没(:not)有(:has)   //包含class为“selected”(.selected)的子节点。   .filter(":not(:has(.selected))")  2. 如何重用元素搜索 var allI

Flink整合Oozie Shell Action 提交任务带Kerberos认证

最近这段时间一直在忙新集群迁移,上了最新的cdh6.3.0 于是Flink 提交遇到了许多的问题,还好有cloudera License 有了原厂的帮助和社区的伙伴,问题解决起来快了不少。 集群具体情况是 CDH6.3.0 Flink1.8.1,整个数据平台全部组件都上了kerberos和ldap因为要过认证,所以任务提交方法我们选择统一Oozie提交任务,并且因为kerberos认证,还需要F

最强的10个交换机实用配置

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 交换机每天都在瞅,但网工对交换机的开发程度不足5%。 交换机工作在OSI模型的第二层,即数据链路层,主要负责数据包的转发。 交换机通过学习MAC地址来构建一张MAC地址表,从而实现数据包的直接转发到目的端口,避免了不必要的网络拥堵和冲突。 今天分享一波实用的交换机配置方法,快速