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;
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!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章