Chinaunix首页 | 论坛 | 博客
  • 博客访问: 893639
  • 博文数量: 282
  • 博客积分: 10843
  • 博客等级: 上将
  • 技术积分: 2435
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-01 15:23
文章分类

全部博文(282)

文章存档

2013年(1)

2012年(18)

2011年(14)

2010年(30)

2009年(48)

2008年(55)

2007年(55)

2006年(61)

分类: Java

2009-12-02 21:18:02

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 {}
    
}


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

 






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


LookupDispatchAction
public abstract class LookupDispatchAction extends DispatchAction

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

struts-config.xml:

(parameter中的"recalc=recalculate"意思为标签的property属性值为recalc调用recalculate方法,出于安全考虑能够隐藏后台的业务方法名。"defaule=save"这是可选的,没有配置property属性的标签将调用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="" 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 {}

}


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

 










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

阅读(1147) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~