原本一个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
分享到:
相关推荐
struts2一个action处理多个请求
具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的输入,这两个页面提交给loginAction中的两个方法进行业务处理,...
在J2EE中Structs Action之处理多个业务
Struts2的Action多个方法配置和验证实例 博文链接:https://zmx.iteye.com/blog/452289
Struts2一个Action内包含多个请求处理方法的处理
struts2.0.6多个action处理操作很好的学习资料,一个小的实例
Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
1 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为...
详细讲解struts2中单个action中多个处理逻辑的配置方法, 以及默认Action的配置.
基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库中查询出来并进行了封装的那些对象,然后...
在理论上Struts2的Action无须实现任何接口或者是继承任何的类,但是,在实际编程过程中,为了更加方便的实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并且重载(Override)此类里的...
spring管理struts的action的代码 从类路径下加载spring的配置文件, 多个配置文件可以用逗号和空格区分 * classpath: 关键字特指类路径下加载
Struts 的 Action 都继承自 org.apache.struts.action.Action,而 Spring 中的继承关系更加复杂,涉及到多个模块和组件的继承关系。 五、实现国际化 实现国际化可以通过 Struts 提供的资源文件来实现。例如,编辑 ...
Struts2_Action学习笔记、通配符{1},{2}......
4. 掌握在视图中多方法调用同一个Action的方法 5.掌握常用标签textfield、radio、paaaword、checkboxlist、select、data的使用方法,实现页面与Action的交互操作 6.要求在创建过程中,包的名称要体现班级和学号,...
为应用指定多个配置文件 动态方法调用和使用通配符定义action 请求参数接收 自定义类型转换器 全局类型转换器 访问或添加几个属性 文件上传 多文件上传 自定义拦截器 对Action中所有方法进行输入校验 对...
2、action是一个pojo,所以struts2.0与框架的藕合度非常低。 实现Action时有时会继承于ActionSupport, 覆盖execute方法,从而创建一个Action。 因为ActionSupport提供了很多方法可以为开发提供方便。 3、...
在 Struts 中,Controller 是一个 Servlet,称为 ActionServlet。ActionServlet 负责截取和分发 HTTP 请求到相应的动作类。动作类用于实现核心商业逻辑,可以访问 Java Bean 或调用 EJB。 5. View View 主要由 JSP...
一个扩展知识点:struts的配置文件可以有多个,可以按模块配置各自的配置文件,这样可以防止配置文件的过度膨胀; 2. ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象(就是一个...
基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库中查询出来并进行了封装的那些对象,然后...