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!