【实例】仿购物车原理-高级Action应用三(通过MappingDispatchAction方式)

本文介绍如何使用Struts中的MappingDispatchAction实现购物车功能的增删操作,通过配置文件和Action内方法配合,实现一个Action指向不同ActionForm的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章是对上一篇文章"【实例】仿购物车原理-高级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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值