原本一个action对应一个exctue方法做业务处理,那么是不是很浪费呢?怎么让一个action可以包含多个处理方法呢?
1,继承(a)DispatchAction,(b)MappingDispatchAction,(c)LookupDispatchAction
2,分别适用于什么情况,a,b都可以通过在form的action和link等传递一个参数过去,让struts框架得知需要调用action中哪个方法,但是a的耦合性没有b的好。
3,a的配置文件
- <action
-
attribute="buyForm"
-
input="/buy.jsp"
-
name="buyForm"
-
path="/buy"
-
parameter="ope"
-
scope="request"
-
type="prj11_1.action.BuyAction"/>
-
[code=HTML]<html:formaction="/buy.do?ope=add">
-
insertbook:<html:textproperty="book"/><html:errorsproperty="book"/><br/>
-
<html:submit/><html:cancel/>
-
</html:form>
-
<hr>
-
showbook:<logic:presentname="cart">
-
<logic:iterateid="book"name="cart">
-
<bean:writename="book"/>
-
<html:linkaction="/buy?ope=delete"paramId="BOOK"paramName="book">delete</html:link>
-
</logic:iterate>
-
</logic:present>
<action
attribute="buyForm"
input="/buy.jsp"
name="buyForm"
path="/buy"
parameter="ope"
scope="request"
type="prj11_1.action.BuyAction" />
[code=HTML]<html:form action="/buy.do?ope=add">
insert book : <html:text property="book"/><html:errors property="book"/><br/>
<html:submit/><html:cancel/>
</html:form>
<hr>
show book:<logic:present name="cart">
<logic:iterate id="book" name="cart">
<bean:write name="book"/>
<html:link action="/buy?ope=delete" paramId="BOOK" paramName="book">delete</html:link>
</logic:iterate>
</logic:present>
这段代码就调用a的action。到底区别在哪里呢?<html:linkaction="/buy?ope=delete><html:formaction="/buy.do?ope=add">就在这里,系统通过add和delete来识别调用的方法,但是jsp必须知道是哪个action。这样不太好。
b的配置文件
- <action
-
attribute="buyForm"
-
input="/buy.jsp"
-
name="buyForm"
-
path="/add"
-
parameter="add"
-
scope="request"
-
type="prj11_1.action.BuyAction"/>
-
-
<action
-
attribute="buyForm"
-
input="/buy.jsp"
-
name="buyForm"
-
path="/delete"
-
parameter="delete"
-
scope="request"
-
type="prj11_1.action.BuyAction"/>
<action
attribute="buyForm"
input="/buy.jsp"
name="buyForm"
path="/add"
parameter="add"
scope="request"
type="prj11_1.action.BuyAction" />
<action
attribute="buyForm"
input="/buy.jsp"
name="buyForm"
path="/delete"
parameter="delete"
scope="request"
type="prj11_1.action.BuyAction" />
[/code]
- <html:formaction="/add">
-
insertbook:<html:textproperty="book"/><html:errorsproperty="book"/><br/>
-
<html:submit/><html:cancel/>
-
</html:form>
-
<hr>
-
showbook:<logic:presentname="cart">
-
<logic:iterateid="book"name="cart">
-
<bean:writename="book"/>
-
<html:linkaction="/delete"paramId="BOOK"paramName="book">delete</html:link>
-
</logic:iterate>
-
</logic:present>
<html:form action="/add">
insert book : <html:text property="book"/><html:errors property="book"/><br/>
<html:submit/><html:cancel/>
</html:form>
<hr>
show book:<logic:present name="cart">
<logic:iterate id="book" name="cart">
<bean:write name="book"/>
<html:link action="/delete" paramId="BOOK" paramName="book">delete</html:link>
</logic:iterate>
</logic:present>
调用了继承b的action通过配置文件,直接可以确定调用那个action方法了。注意parameter="delete"和parameter="add"。
c的配置文件
<action
attribute="lrForm"
input="/lr.jsp"
name="lrForm"
parameter="ope"
path="/lr"
scope="request"
type="prj11_1.action.LrAction"/>
c可以用来判断2个不同功能按钮到底怎么做出来。但是要结合资源文件来使用。
jsp页面
- <html:formaction="/lr">
-
account:<html:textproperty="account"/><br/>
-
password:<html:passwordproperty="password"/><br/>
-
<html:submitproperty="ope"><bean:messagekey="info.login"/></html:submit>
-
<html:submitproperty="ope"><bean:messagekey="info.register"/></html:submit>
-
</html:form>
<html:form action="/lr">
account : <html:text property="account"/><br/>
password : <html:password property="password"/><br/>
<html:submit property="ope"><bean:message key="info.login"/></html:submit>
<html:submit property="ope"><bean:message key="info.register"/></html:submit>
</html:form>
资源文件
info.login=login
info.register=register
action的代码
- publicclassLrActionextendsLookupDispatchAction{
-
-
protectedMapgetKeyMethodMap(){
-
Mapmap=newHashMap();
-
map.put("info.login","login");
-
map.put("info.register","register");
-
returnmap;
- }
-
publicActionForwardlogin(ActionMappingmapping,ActionFormform,
- HttpServletRequestrequest,HttpServletResponseresponse){
- LrFormlrForm=(LrForm)form;
-
returnnull;
- }
-
-
publicActionForwardregister(ActionMappingmapping,ActionFormform,
- HttpServletRequestrequest,HttpServletResponseresponse){
- LrFormlrForm=(LrForm)form;
-
returnnull;
- }
public class LrAction extends LookupDispatchAction {
protected Map getKeyMethodMap() {
Map map=new HashMap();
map.put("info.login","login");
map.put("info.register","register");
return map;
}
public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LrForm lrForm = (LrForm) form;
return null;
}
public ActionForward register(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LrForm lrForm = (LrForm) form;
return null;
}
必须实现getKeyMethodMap
分享到:
相关推荐
本实例探讨了如何让一个Action类处理多个请求,这在开发中常见于需要集中处理相似请求的情况,可以提高代码复用性和结构的整洁性。 首先,理解Struts2的映射机制至关重要。在Struts2的配置文件(通常为struts.xml或...
1. **单一Action处理多个业务**:在一个Action类中定义多个方法,每个方法对应一个业务,然后在struts-config.xml配置文件中为每个方法指定不同的`<action>`元素。请求参数可以用来区分调用哪个方法。 2. **使用...
具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的输入,这两个页面提交给loginAction中的两个方法进行业务处理,...
在Struts2框架中,处理多个请求的方法是通过一个Action类实现多个处理方法。这使得代码结构更加清晰,每个方法对应特定的业务逻辑。以下是Struts2处理多个请求的三种主要方式的详细说明: 1. **动态方法调用 (DMI -...
这篇博客主要讨论了如何配置Struts2 Action中的多个方法以及如何进行数据验证。 首先,一个Action类可以包含多个方法,每个方法对应一个特定的HTTP请求。这种多方法配置允许我们根据不同的请求路径来调用不同的业务...
在"struts2.0.6多个action处理"这个主题中,我们将深入探讨如何在Struts2框架下管理并执行多个Action。这通常涉及到配置、映射和Action类的设计,以及请求的路由。 1. **Action配置**:在Struts2中,Action是业务...
Struts2作为一款流行的Java Web框架,其在处理用户请求时扮演着重要的角色。它提供了强大的功能,包括对Action类中的方法进行校验。在Web应用程序中,数据校验是确保用户输入合法性和应用程序安全性的关键步骤。...
当我们想要调用同一个Action中的多个方法时,通常需要为每个方法创建单独的`<action>`元素,这可能会导致配置文件变得冗长且难以维护。 为了解决这个问题,Struts2引入了通配符机制。在URL路径中使用星号(*)作为...
在处理文件上传时,Struts2提供了便捷的API和配置方式,使得开发人员能够轻松实现多文件上传的功能。下面将详细阐述如何使用Struts2来实现多个文件的上传。 首先,理解文件上传的基本原理。在HTTP协议中,文件上传...
本项目主要展示了如何在Struts2框架下实现单个文件和多个文件的上传及下载,并且运用了多个拦截器来增强功能和安全性。 首先,让我们详细了解一下文件上传的过程。在Struts2中,文件上传主要依赖于`struts2-...
但是,通过`method`属性,我们可以指定不同的方法对应不同的Action,这样可以实现一个类中多个方法的映射,提高代码复用性。例如: ```xml <action name="add" class=...
在实际开发中,我们经常需要在一个 Action 中实现多个处理逻辑,这样可以减少代码的重复和提高开发效率。那么,在 Struts2 中如何动态调用 Action 的指定方法呢? 首先,我们可以在表单中使用 `<form action="login...
`ActionSupport`提供了诸如国际化、错误处理和验证等基础功能,它实现了多个接口,包括`com.opensymphony.xwork2.Action`、`com.opensymphony.xwork2.LocaleProvider`、`com.opensymphony.xwork2.TextProvider`、`...
在处理一个表单(form)中存在多个submit按钮的情况时,Struts2提供了一种优雅的方式来区分用户点击了哪个按钮,而无需像Struts1那样使用额外的动作类(如LookupDispatchAction或EventDispatchAction)。 在传统的...
它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种机制不仅能够减少代码重复,还能提高代码的可读性和可维护性。本文档将详细介绍如何在Struts 2中实现Action动态方法调用...
10. **案例研究**:书中包含多个完整的案例,帮助读者将理论知识应用于实际项目,加深理解和应用。 通过阅读《Struts In Action》中文完整版,开发者不仅能掌握Struts框架的核心技术,还能了解如何在实际项目中灵活...
Struts是Java Web开发中的一款经典MVC框架,它的核心组件之一是DispatchAction,这个组件在处理用户请求时起到了至关重要的作用。DispatchAction是Struts提供的一个可扩展的Action类,它允许开发者将一个单一的...
在处理用户请求时,Struts2允许开发者通过Action类来接收和处理参数,包括中文参数。当我们需要通过POST方法提交包含中文字符的数据时,可能会遇到编码问题,因为HTTP请求默认使用的是ASCII编码,而中文字符需要UTF-...
在Struts1.x中,实现文件上传功能是一个常见的需求,特别是在处理用户提交的表单时需要包含多个文件。下面我们将详细介绍如何使用Struts1.x来实现多个文件的上传。 首先,我们需要在HTML表单中添加`...
Apache Struts作为一款成熟的MVC框架,在处理文件上传方面有着独特的优势。本文将详细解析如何使用Struts框架实现多文件上传的功能,并对相关的代码进行深入分析。 #### 一、Struts框架简介 Struts是一款开源的...