struts1.2 几种Action详解

java.lang.Object

    org.apache.struts.action.Action

        org.apache.struts.actions.DispatchAction

            org.apache.struts.actions.LookupDispatchAction(Struts1.
1 )

            org.apache.struts.actions.EventDispatchAction(Struts1.
2.9 )

            org.apache.struts.actions.MappingDispatchAction(Struts1.
2 )


DispatchAction
public abstract class DispatchAction extends Action


这是一个抽象的Action,它会根据request 中的parameter来执行相应的方法。通个这个Action类可以将不同的Action集中到一个Action文件中来。

struts-config.xml:


< action path ="/subscription" type ="org.example.SubscriptionAction" name ="subscriptionForm"   scope ="request" input ="/subscription.jsp" parameter ="method" />

在Action中要有相应的方法:

public class SubscriptionAction extends DispatchAction {
  
   
public ActionForward delete(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
throws Exception {}
   
   
public ActionForward insert(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
throws Exception {}
   
   
public ActionForward update(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
throws Exception {}
   
}

然后可以通过这样的方法来访问你的程序:

http://localhost:8080/myapp/subscription.do?method=delete

http://localhost:8080/myapp/subscription.do?method=insert

http://localhost:8080/myapp/subscription.do?method=update

如果parameter中参数为空,则调用Action中的unspecified方法


LookupDispatchAction
public abstract class LookupDispatchAction extends DispatchAction


通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性决定。每个动作实际上就是<html:submit>标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。

struts-config.xml:


< action path ="/subscription" type ="org.example.SubscriptionAction" name ="subscriptionForm" scope ="request"
input
="/subscription.jsp" parameter ="method" />

ApplicationResources.properties:

button.add=Add Record
button.delete=Delete Record

JSP:

<% @ page pageEncoding = " GBK " %>
<% @ taglib uri = " http://struts.apache.org/tags-html " prefix = " html " %>
< html >
 
< head >
   
< title > 多提交演示 </ title >
 
</ head >
 
< body >
   
< html:form action ="subscription" >
     
< html:submit property ="method" >
       
< bean:message key ="button.add" />
     
</ html:submit >
     
< html:submit property ="method" >
       
< bean:message key ="button.delete" />
     
</ html:submit >
   
</ html:form >
 
</ body >
</ html >

在Action中必须实现getKeyMethodMap方法:

public class SubscriptionAction extends LookupDispatchAction {

   
protected Map getKeyMethodMap() {
        Map map
= new HashMap();
        map.put(
" button.add " , " add " );
        map.put(
" button.delete " , " delete " );
       
return map;
    }

   
public ActionForward add(ActionMapping mapping,
                             ActionForm form,
                             HttpServletRequest request,
                             HttpServletResponse response)
throws Exception {}

   
public ActionForward delete(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
throws Exception {}

}


EventDispatchAction
public class EventDispatchAction extends DispatchAction


通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性指定多个动作,中间用逗号(,)分隔。每个动作实际上就是<html:submit>标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。

struts-config.xml:

(parameter中的"recalc=recalculate"意思为<html:submit>标签的property属性值为recalc调用recalculate方法,出于安全考虑能够隐藏后台的业务方法名。"defaule=save"这是可选的,没有配置property属性的<html:submit>标签将调用defaule中设置的方法名,如果defaule没有指定任何参数,则调用Action中的unspecified方法)


< action path ="/subscription" type ="org.example.SubscriptionAction" name ="subscriptionForm" scope ="request"
input
="/subscription.jsp" parameter ="save,back,recalc=recalculate,default=save" />


JSP:

<% @ page pageEncoding = " GBK " %>
<% @ taglib uri = " http://struts.apache.org/tags-html " prefix = " html " %>
< html >
 
< head >
   
< title > 多提交演示 </ title >
 
</ head >
 
< body >           
   
< html:form action ="subscription" >
     
< html:submit property ="save" value ="保存" />
     
< html:submit property ="back" value ="后退" />
     
< html:submit property ="recalc" value ="重新计算" />
   
</ html:form >  
 
</ body >
</ html >

在Action中要有相应的方法:

public class SubscriptionAction extends LookupDispatchAction {

   
public ActionForward save(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
throws Exception {}

   
public ActionForward back(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
throws Exception {}

   
public ActionForward recalculate(ActionMapping mapping,
                                     ActionForm form,
                                     HttpServletRequest request,
                                     HttpServletResponse response)
throws Exception {}

}


MappingDispatchAction
public class MappingDispatchAction extends DispatchAction


它的相应方法的执行由ActionMapping中parameter名决定,注意这里和LookupDispatchAction不同,LookupDispatchAction的相应方法的执行由ActionMapping中parameter属性决定。

struts-config.xml:


< action path ="/createSubscription" type ="org.example.SubscriptionAction" parameter ="create" >
     
< forward name ="success" path ="/createSubscription.jsp" />
</ action >
< action path ="/editSubscription" type ="org.example.SubscriptionAction" parameter ="edit" >
     
< forward name ="success" path ="/editSubscription.jsp" />
</ action >
< action path ="/saveSubscription" type ="org.example.SubscriptionAction" parameter ="save"
name
="subscriptionForm" validate ="true" input ="/editSubscription.jsp" scope ="request" >
     
< forward name ="success" path ="/savedSubscription.jsp" />
</ action >
< action path ="/deleteSubscription" type ="org.example.SubscriptionAction" name ="subscriptionForm"
scope
="request" input ="/subscription.jsp" parameter ="delete" >
     
< forward name ="success" path ="/deletedSubscription.jsp" />
</ action >
< action path ="/listSubscriptions" type ="org.example.SubscriptionAction" parameter ="list" >
     
< forward name ="success" path ="/subscriptionList.jsp" />
</ action >

在Action中要有相应的方法:

public class SubscriptionAction extends MappingDispatchAction {

   
public ActionForward create(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
throws Exception {}


   
public ActionForward edit(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
throws Exception {}


   
public ActionForward save(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
throws Exception {}


   
public ActionForward delete(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
throws Exception {}


   
public ActionForward list(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
throws Exception {}

}

然后可以通过这样的方法来访问你的程序

http://localhost:8080/myapp/create.do

http://localhost:8080/myapp/edit.do

http://localhost:8080/myapp/save.do

http://localhost:8080/myapp/delete.do

http://localhost:8080/myapp/list.do

如果parameter中参数为空,则调用Action中的unspecified方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值