您的位置:首页 > 其它

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

2015-02-13 09:55 429 查看
本篇文章是对上一篇文章"【实例】仿购物车原理-高级Action应用一(普通传参方式)"功能进行完善。

通过DispatchAction类把删除和添加购物车的方法,归纳到一个Action里面。

1.使用DispatchAction方法的流程

1.1建立一个DispatchAction,并给定参数method,编写处理函数

1.2在Jsp中用action路径?method=方法名称方式提交(注意method=post)

1.3DispatchAction类必须引用import org.apache.struts.actions.DispatchAction;包

1.4需要在struts-config.xml配置文件中增加parameter="method"属性

总结

好处:通过DispatchAction类把删除和添加购物车的方法,归纳到一个Action里面。

缺陷:jsp页面中要传递的参数要认识Action内的方法

部分代码如下

buy.jsp页面(页面对删除功能进行了完善)

</pre><pre>


<%@ 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><!--参数add与delete必须要和Action.java内的方法一致-->
<!--/buy.so?method=add中的method必须要和配置文件中的parameter="method"一致-->
<html:form action="/buy.so?method=add" 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="/buy.so?method=delete" 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.DispatchAction;	//使用DispatchAction 必须引用这个包

public class BuyAction extends DispatchAction {
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
attribute="buyForm"
input="/buy.jsp"
name="buyForm"
path="/buy"
scope="request"
parameter="method"<span style="white-space:pre">	</span>//jsp页面之所以能接收到add与delete的参数值,全靠这个属性
type="guo_demo5.action.BuyAction">
<set-property property="cancellable" value="true" />
</action>

</action-mappings>
<message-resources parameter="guo_demo5.ApplicationResources" />
</struts-config>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: