DispatchAction类

 
DispatchAction
 
         DispatchAction 类是为了执行聚合操作而设计的 Action 类。用 HTML 标签和 <html:html> 标签都可以实现,但是要写 js 脚本代码。(用 <html:html> 实现时,要设置 <html:form method=”post”> )使用请求参数值确定调用哪种方法。 Struts-config.xml 中配置如下:
DispatchAction 类使用
Html 方式:
1 编写脚本文件 :
         function doSubmit(operate)
         {
              document.forms[0].elements[ "operate" ].value=operate;
              document.forms[0].submit();
         }
2 设置隐藏域,用于传值。
3 struts.config.xml 中的 parameter = "operate" 要与 < input type = "hidden" name = "operate" > 中的name属性一致。
 
<html:html>
前三步都相同,但要设置 <html:form> method=”post”     < action
      attribute = "calcForm"
      name = "calcForm"
      path = "/calc"
      scope = "request"
      type = "cn.action.CalcAction"
      parameter = "operate" >
      < forward name = "input" path = "/input.jsp" ></ forward >
      < forward name = "result" path = "/result.jsp" ></ forward >
</ action >
属性
描述
Path
Action 类的相对路径
Name
与本操作关联的Action bean的名称
Type
连接到本映射的Action类的全称(可有包名)
Scope
ActionForm bean 的作用域(请求或会话)
Prefix
用来匹配请求参数与bean属性的前缀
Suffix
用来匹配请求参数与bean属性的后缀
attribute
作用域名称。
className
ActionMapping 对象的类的完全限定名 默认的类是org.apache.struts.action.ActionMapping
input
输入表单的路径,指向bean发生输入错误必须返回的控制
unknown
设为true,操作将被作为所有没有定义的ActionMapping的URI的默认操作
validate
设置为true,则在调用Action对象上的perform()方法前,ActionServlet将调用ActionForm bean的validate()方法来进行输入检查
parameter
指定请求中方法名称参数对应的参数名称。
  在编写 DispatchAction 的代码时,不仅指明映射路径,还要附加一个 method 的参数,指用调用的方法名称。
<form> 中的 method 属性也要设为 post 方式。
 
例子:用 html 标签实现的四则运算 , 不带验证!
Input.jsp 代码如下:
<%@ page language = "java" pageEncoding = "gb18030" %>
< html >
     < head >
         < title > DispatchAction </ title >
     < script type = "text/javascript" >
         function doSubmit(operate)
         {
              document.forms[0].elements[ "operate" ].value=operate;
              document.forms[0].submit();
         }
     </ script >
     </ head >
     < body >
         < form action = "calc.do" >
              第一个数 : < input type = "text" name = "num1" />< br />
              第二个数 : < input type = "text" name = "num2" />< br />
             < input type = "hidden" name = "operate" >// 主要是用隐藏域来实现
              < input type = "button" onclick = "doSubmit('doAdd');" value = " 加" >
              < input type = "button" onclick = "doSubmit('doSubtract');" value = " 减" >
              < input type = "button" onclick = "doSubmit('doMultiply');" value = " 乘" >
              < input type = "button" onclick = "doSubmit('doDivide');" value = " 除" >
         </ form >
     </ body >
</ html >
 
CalcAction.java 代码如下:
package cn.action;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import cn.form.CalcForm;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionMessage;
public class CalcAction extends DispatchAction {
     private int num1 =0;
     private int num2 =0;
    
     //
     public ActionForward doAdd(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
         CalcForm calcForm = (CalcForm) form; // TODO Auto-generated method stub
         //ActionMessages errors=new ActionMessages();
         HttpSession session=request.getSession();
         session=request.getSession();
         num1 =Integer.parseInt(calcForm.getNum1());
         num2 =Integer.parseInt(calcForm.getNum2());
         session.setAttribute( "result" , Integer.valueOf(( num1 + num2 )));
         return mapping.findForward( "result" );
     }
    
     //
     public ActionForward doSubtract(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
         CalcForm calcForm = (CalcForm) form; // TODO Auto-generated method stub
         HttpSession session=request.getSession();
          session=request.getSession();
         num1 =Integer.parseInt(calcForm.getNum1());
         num2 =Integer.parseInt(calcForm.getNum2());
         session.setAttribute( "result" , Integer.valueOf(( num1 - num2 )));
         return mapping.findForward( "result" );
     }
    
     //
     public ActionForward doMultiply(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
         CalcForm calcForm = (CalcForm) form; // TODO Auto-generated method stub
         HttpSession session=request.getSession();
         session=request.getSession();
         num1 =Integer.parseInt(calcForm.getNum1());
         num2 =Integer.parseInt(calcForm.getNum2());
         session.setAttribute( "result" , Integer.valueOf(( num1 * num2 )));
         return mapping.findForward( "result" );
     }
    
     //
     public ActionForward doDivide(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
         CalcForm calcForm = (CalcForm) form; // TODO Auto-generated method stub
         ActionMessages errors=calcForm.validate(mapping, request);
         if (Integer.parseInt(calcForm.getNum2())==0){
              errors.add( "error2" , new ActionMessage( "errors.validate.zero" ));
              super .saveErrors(request, errors); // 调用ActionForm方法保存这个错误信息
              return mapping.findForward( "input" );
         }
         HttpSession session=request.getSession();
         session=request.getSession();
         num1 =Integer.parseInt(calcForm.getNum1());
         num2 =Integer.parseInt(calcForm.getNum2());
         session.setAttribute( "result" , Integer.valueOf(( num1 / num2 )));
         return mapping.findForward( "result" );
     }
}
 
Struct-config.xml 配置如下:
  < action-mappings >
    < action
      attribute = "calcForm"
      name = "calcForm"
      path = "/calc"
      scope = "request"
      type = "cn.action.CalcAction"
       parameter = "operate" >
      < forward name = "input" path = "/input.jsp" ></ forward >
      < forward name = "result" path = "/result.jsp" ></ forward >
      </ action >
  </ action-mappings >
 
例子:用 <html:html> 标签实现的四则运算,带验证!
 
Input.jsp 页面代码如下:
<%@ page language = "java" pageEncoding = "gb18030" %>
<%@ taglib uri = "http://jakarta.apache.org/struts/tags-bean" prefix = "bean" %>
<%@ taglib uri = "http://jakarta.apache.org/struts/tags-html" prefix = "html" %>
 
< html:html >
     < head >
         < title > DispatchAction2 </ title >
         < script type = "text/javascript" >
              function doSubmit(operate)
              {
                   document.forms[0].elements[ "operate" ].value=operate;
                   alert(document.forms[0].elements[ "operate" ].value);
                   document.forms[0].submit();
                   //document.forms[0].action = "calc.do?operation=display";
               //document.forms[0].submit();
                  
              }
         </ script >
     </ head >
     < body >
         < html:form action = "/calc.do" method = "post" >
             第一个数 : < html:text property = "num1" />< html:errors property = "error1" />< br />
              第二个数 : < html:text property = "num2" />< html:errors property = "error2" />< br />
              < input type = "hidden" name = "operate" >
              < html:button property = "button" value = " 加" onclick = "doSubmit('doAdd')" />
              < html:button property = "button" value = " 减" onclick = "doSubmit('doSubtract')" />
              < html:button property = "button" value = " 乘" onclick = "doSubmit('doMultiply')" />
              < html:button property = "button" value = " 除" onclick = "doSubmit('doDivide')" />
              < html:reset property = "reset" value = " 清除" ></ html:reset >
         </ html:form >
     </ body >
</ html:html >
 
CalcForm.java 代码如下
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package cn.form;
 
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
import org.apache.*;
/**
 * MyEclipse Struts
 * Creation date: 03-22-2008
 *
 * XDoclet definition:
 * @struts.form name="calcForm"
 */
public class CalcForm extends ActionForm {
         /*
          * Generated fields
          */
 
         /** num2 property */
         private String num2;
 
         /** num1 property */
         private String num1;
 
         /*
          * Generated Methods
          */
 
         /**
          * Method validate
          * @param mapping
          * @param request
          * @return ActionErrors
          */
         public ActionErrors validate(ActionMapping mapping,
                            HttpServletRequest request) {
                   // TODO Auto-generated method stub
                   ActionErrors errors=new ActionErrors();
                   if(this.getNum1().length()==0 || this.getNum2().length()==0 ){
                            errors.add("error1",new ActionMessage("errors.validate.number"," 第一个数 "));
                            errors.add("error2",new ActionMessage("errors.validate.number"," 第二个数 "));
                   }
                   return errors;
         }
 
         /**
          * Method reset
          * @param mapping
          * @param request
          */
         public void reset(ActionMapping mapping, HttpServletRequest request) {
                   // TODO Auto-generated method stub
                   this.setNum1("");
                   this.setNum2("");
         }
 
         /**
          * Returns the num2.
          * @return String
          */
         public String getNum2() {
                   return num2;
         }
 
         /**
          * Set the num2.
          * @param num2 The num2 to set
          */
         public void setNum2(String num2) {
                   this.num2 = num2;
         }
 
         /**
          * Returns the num1.
          * @return String
          */
         public String getNum1() {
                   return num1;
         }
 
         /**
          * Set the num1.
          * @param num1 The num1 to set
          */
         public void setNum1(String num1) {
                   this.num1 = num1;
         }
}
 
CalcAction.java 代码如下:
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package cn.action;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import cn.form.CalcForm;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionMessage;
/**
  * MyEclipse Struts
  * Creation date: 03 - 22 - 2008
  *
  * XDoclet definition:
  * @struts .action path="/calc" name="calcForm" input="/result.jsp" scope="request" validate="true"
  */
public class CalcAction extends DispatchAction {
     /*
      * Generated Methods
      */
     private int num1 =0;
     private int num2 =0;
    
     //
     public ActionForward doAdd(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
         CalcForm calcForm = (CalcForm) form; // TODO Auto-generated method stub
         //ActionMessages errors=new ActionMessages();
         HttpSession session=request.getSession();
         session=request.getSession();
         num1 =Integer.parseInt(calcForm.getNum1());
         num2 =Integer.parseInt(calcForm.getNum2());
         session.setAttribute( "result" , Integer.valueOf(( num1 + num2 )));
         return mapping.findForward( "result" );
     }
    
     //
     public ActionForward doSubtract(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
         CalcForm calcForm = (CalcForm) form; // TODO Auto-generated method stub
         HttpSession session=request.getSession();
         session=request.getSession();
         num1 =Integer.parseInt(calcForm.getNum1());
         num2 =Integer.parseInt(calcForm.getNum2());
         session.setAttribute( "result" , Integer.valueOf(( num1 - num2 )));
         return mapping.findForward( "result" );
     }
    
     //
     public ActionForward doMultiply(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
         CalcForm calcForm = (CalcForm) form; // TODO Auto-generated method stub
         HttpSession session=request.getSession();
         session=request.getSession();
         num1 =Integer.parseInt(calcForm.getNum1());
         num2 =Integer.parseInt(calcForm.getNum2());
         session.setAttribute( "result" , Integer.valueOf(( num1 * num2 )));
         return mapping.findForward( "result" );
     }
    
     //
     public ActionForward doDivide(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
         CalcForm calcForm = (CalcForm) form; // TODO Auto-generated method stub
         ActionMessages errors=calcForm.validate(mapping, request);
         if (Integer.parseInt(calcForm.getNum2())==0){
              errors.add( "error2" , new ActionMessage( "errors.validate.zero" ));
              super .saveErrors(request, errors); // 调用ActionForm方法保存这个错误信息
              return mapping.findForward( "input" );
         }
         HttpSession session=request.getSession();
         session=request.getSession();
         num1 =Integer.parseInt(calcForm.getNum1());
         num2 =Integer.parseInt(calcForm.getNum2());
         session.setAttribute( "result" , Integer.valueOf(( num1 / num2 )));
         return mapping.findForward( "result" );
     }
}
 
Struts-config.xml 配置如下:
< struts-config >
  < data-sources />
  < form-beans >
    < form-bean name = "calcForm" type = "cn.form.CalcForm" />
 
  </ form-beans >
 
  < global-exceptions />
  < global-forwards />
  < action-mappings >
    < action
      input = "/input.jsp"// 验证必须
      attribute = "calcForm"
      name = "calcForm"
      path = "/calc"
      scope = "request"
       type = "cn.action.CalcAction"
      validate = "true"// 验证必须
      parameter = "operate" >//DispatchAction 必须
      < forward name = "input" path = "/input.jsp" ></ forward >
      < forward name = "result" path = "/result.jsp" ></ forward >
      </ action >
 
  </ action-mappings >
 
  < message-resources parameter = "cn.ApplicationResources" />
</ struts-config >
 
资源文件:
errors.footer          = </span>
errors.header          = <span style="color : red;">
errors.validate.number = {0} /u4E0D/u80FD/u4E3A/u7A7A,/u4E14/u5FC5/u987B/u4E3A/u6570/u5B57!
errors.validate.zero   = /u9664/u6570/u4E0D/u80FD/u4E3A0!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值