本篇文章是对上一篇文章"【实例】仿购物车原理-高级Action应用二(通过DispatchAction方式)"功能进行完善。
MappingDispatchAction是DispatchAction的子类;通过MappingDispatchAction可以使得耦合性降低并且之编写一个Action,而让它可以指向不同结构不同ActionForm
1.使用MappingDispatchAction方法的流程
1.1建立一个MappingDispatchAction,并给定参数method,编写处理函数
1.2在Jsp中用传统的action="/路径"方式提交(这里的路径对应struts-config.xml配置文件中的path)
1.3配置文件struts-config.xml中添加parameter="delete"与parameter="add"属性;用于识别BuyAction.java中的两个方法(函数)
1.4MappingDispatchAction类必须引用import org.apache.struts.actions.MappingDispatchAction;包
总结
好处:通过MappingDispatchAction可以使得耦合性降低并且之编写一个Action,而让它可以指向不同结构不同ActionForm;
缺陷:jsp页面中要传递的参数要认识Action内的方法,耦合性高;
部分代码如下
buy.jsp页面(页面对删除功能进行了完善)
<pre name="code" class="java"><%@ page language="java" pageEncoding="gb2312"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>
<html>
<head>
<title>添加图书到购物车</title>
</head>
<body>
<html:form action="/add.so" method="post">
请填写您要买的图书 : <html:text property="book"/><br/>
<html:submit value="点击提交到购物车"/>
</html:form>
<hr/>
<logic:present name="cart">
<logic:iterate id="book" name="cart">
<bean:write name="book"/>
<html:link action="/delete.so" paramId="Book" paramName="book">删除</html:link><br/>
</logic:iterate>
</logic:present>
</body>
</html>
ActionForm页面(BuyForm.java)
public class BuyForm extends ActionForm {
//生成book成员属性的get与set方法
private String book;
}
Action页面(BuyAction.java)
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package guo_demo5.action;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import guo_demo5.form.BuyForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction; //使用MappingDispatchAction 必须引用这个包
public class BuyAction extends MappingDispatchAction {
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
BuyForm buyForm = (BuyForm) form;
String book = buyForm.getBook();
try {
book = new String(book.getBytes("ISO-8859-1"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpSession session = request.getSession();
ArrayList cart =(ArrayList)session.getAttribute("cart");
if(cart==null){
cart = new ArrayList();
session.setAttribute("cart", cart);
}
cart.add(book);
return new ActionForward("/buy.jsp");
}
//删除方法
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
String book = request.getParameter("Book");
try {
book = new String(book.getBytes("ISO-8859-1"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpSession session = request.getSession();
ArrayList cart =(ArrayList)session.getAttribute("cart");
cart.remove(book);
return new ActionForward("/buy.jsp");
}
}
struts-config.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans >
<form-bean name="buyForm" type="guo_demo5.form.BuyForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
name="buyForm"
path="/buy"
type="guo_demo5.action.BuyAction">
<set-property property="cancellable" value="true" />
</action>
<!-- 添加购物车参数设置 -->
<action
name="buyForm"
path="/add"
parameter="add"
type="guo_demo5.action.BuyAction">
<set-property property="cancellable" value="true" />
</action>
<!-- 删除购物车参数设置 -->
<action
name="buyForm"
path="/delete"
parameter="delete"
type="guo_demo5.action.BuyAction">
<set-property property="cancellable" value="true" />
</action>
</action-mappings>
<message-resources parameter="guo_demo5.ApplicationResources" />
</struts-config>