屬性
|
描述
|
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類
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>
在編寫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!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.