LookupDispatchAction类
它是DispatchAction类的子类,也可以定义多种业务方法,它是利用请求参数值,反向查询资源并将它与类中的一种方法匹配。通常用于有多个同名提交按钮的表单的场合。它的处理更加简单。
该Action也可包含多个处理方法,它可让处理方法与按钮直接关联,无须使用任何的脚本。使用LookupDispatchAction时,提交按钮必须使用Struts 的html 标签.
LookupDispatchAction类使用:
1 必须用struts的html标签
2 必须实现LookupDispatchAction类的protected Map getKeyMethodMap()方法,即将这个类中的业务处理方法绑定到相关按钮上!
3 struts.config.xml中parameter="method"要与<html:submit property="method">中的属性值相同。
<action
attribute="calcForm"
input="/input.jsp"
name="calcForm"
path="/calc"
scope="request"
parameter="method"
type="cn.action.CalcAction">
<forward name="input" path="/input.jsp"></forward>
<forward name="result" path="/result.jsp"></forward>
</action>
这段配置代码表明:该action根据method 参数来区分请求分别调用哪个方法,此时无须使用method 的隐藏域,而是将按钮的property 设为method。通过这种方式可以避免书写javascript脚本。
例子:用LookupDispatchAction实现四则运算
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>
<head>
<title>LookupDispatchAction</title>
</head>
<body>
<html:form action="calc" method="post">
第一个数 : <html:text property="num1"/><html:errors property="error1"/><br/>
第二个数 : <html:text property="num2"/><html:errors property="error2"/><br/>
<html:submit property="method"><bean:message key="operate.add"/></html:submit>
<html:submit property="method"><bean:message key="operate.subtract"/></html:submit>
<html:submit property="method"><bean:message key="operate.multiply"/></html:submit>
<html:submit property="method"><bean:message key="operate.divide"/></html:submit>
<html:reset property="reset"><bean:message key="operate.clear"/></html:reset>
</html: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.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.actions.LookupDispatchAction;
import cn.form.CalcForm;
import java.util.HashMap;
import java.util.Map;
/**
*MyEclipseStruts
*Creationdate:03-23-2008
*
*XDocletdefinition:
*@struts.actionpath="/calc"name="calcForm"input="/input.jsp"scope="request"validate="true"
*/
publicclass CalcAction extends LookupDispatchAction {
//实现getKeyMethodMap()方法
//从map对象中查找与按钮名称对应的方法
//将方法绑定到按钮上
protected Map getKeyMethodMap(){
Map map=new HashMap();
map.put("operate.add","doAdd");
map.put("operate.subtract","doSubtract");
map.put("operate.multiply","doMultiply");
map.put("operate.divide","doDivide");
return map;
}
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");
}
}