DispatchAction类

来源:互联网 发布:索尼爱立信lt18i软件 编辑:程序博客网 时间:2024/05/22 03:49
 
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方式。
如:http://localhost:8080/action/calc.do?operate=doAdd
 
例子:用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;
publicclass CalcAction extends DispatchAction {
     privateintnum1=0;
     privateintnum2=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;
/**
 *MyEclipseStruts
 *Creationdate:03-22-2008
 *
 *XDocletdefinition:
 *@struts.actionpath="/calc"name="calcForm"input="/result.jsp"scope="request"validate="true"
 */
publicclass CalcAction extends DispatchAction {
     /*
      * Generated Methods
      */
     privateintnum1=0;
     privateintnum2=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          = <spanstyle="color:red;">
errors.validate.number = {0}/u4E0D/u80FD/u4E3A/u7A7A,/u4E14/u5FC5/u987B/u4E3A/u6570/u5B57!
errors.validate.zero   = /u9664/u6570/u4E0D/u80FD/u4E3A0!
原创粉丝点击