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!
- DispatchAction类
- DispatchAction类
- DispatchAction类
- struts1 DispatchAction类例子
- struts中的DispatchAction类
- Struts1 DispatchAction类
- DispatchAction
- DispatchAction
- DispatchAction
- DispatchAction
- DispatchAction
- dispatchAction
- DispatchAction
- dispatchAction
- DispatchAction
- DispatchAction
- DispatchAction
- DispatchAction
- eclipse发布应用时 Could not copy all resources to tomcat
- 什么是*args和**kwargs?
- python学习(4)-文件操作
- ·改善用户体验的alert提示
- 随滚动条滚动而移动的层
- DispatchAction类
- 随滚动条滚动而移动的层
- 使用 pyExcelerator 读 Execl 文件
- 回调设计模式
- 第4章:css,javaScript,VBScript和JSP
- 苏轼《水调歌头·中秋有怀子由》解读
- Spring 与hibernate 的结合 (Liferay 去掉hb 的参考资料一)
- MySQL中如何实现Top N及M至N段的记录查询?
- 为受数据驱动的 Web 站点构建定制模板