实现要求:
(a)输入要购买的商品
(b)点击提交按钮后
(c)结账页面将所选择的商品全部列出
代码实现:
b9_shopping.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="_b9_shopping_sent.jsp" method="post">
<h2>
请输入要购买的商品:
<input type="text" name="book">
<input type="submit" name="sent" value="提交">
</h2>
</form>
</body>
</html>
_b9_shopping_sent.jsp:
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<style>
span{
color: red;
}
form{
margin-left: 120px;
}
</style>
<%!
ArrayList<String> list = new ArrayList<String>();
%>
<%
request.setCharacterEncoding("utf-8");
String book = request.getParameter("book");
list.add(book);
session.setAttribute("books", list);
%>
<h4>
提示:您刚才选择了商品<span><%=book %></span>,请问,你还想做什么?<br>
</h4>
<form action="_b9_shopping_.jsp" method="post" style="float:left;">
<input type="submit" value="继续购买" name="continue">
</form>
<form action="_b9_shopping_show.jsp" method="post">
<input type="submit" value="结账" name="final">
</form>
</body>
</html>
说明:
这里使用了ArrayList集合,这是因为最终要求把所购买的所有的商品都输出来,所以有多个值
那为什么使用集合而不是用数组,因为集合长度可变,适合进行不断的添加
_b9_shopping_show.jsp:
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>非常感谢您的光临!您购买的商品有:</h2><br>
<%
@SuppressWarnings("unchecked")//添加这个下面的ArrayList警告就会解除
ArrayList<String> l = (ArrayList<String>)session.getAttribute("books");
if(l!=null){
for(int i = 0 ; i < l.size() ; i++){
out.print("商品"+(i+1)+":"+l.get(i)+"<br>");
}
}
%>
</body>
</html>
注意:
对于上面的代码,有一个问题所在,就是当结账后,再次重新运行购买商品的时候,商品是在原本的基础上继续累加的
只需要将_b9_shopping_sent.jsp文件中的代码稍作修改即可:
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<style>
span{
color: red;
}
form{
margin-left: 120px;
}
</style>
<%
request.setCharacterEncoding("utf-8");
String book = request.getParameter("book");
if(book != null && book.length()!=0){
@SuppressWarnings("unchecked")//添加这个下面的ArrayList警告就会解除
ArrayList<String> list = (ArrayList<String>)session.getAttribute("books");
if(list == null){//books还不存在的时候
list = new ArrayList<String>();
list.add(book);
session.setAttribute("books", list);
}else{
list.add(book);
session.setAttribute("books", list);
}
}else{//如果为空,让用户返回重新输入
response.sendRedirect("_b9_shopping_.jsp");
}
%>
<h4>
提示:您刚才选择了商品<span><%=book %></span>,请问,你还想做什么?<br>
</h4>
<form action="_b9_shopping_.jsp" method="post" style="float:left;">
<input type="submit" value="继续购买">
<!-- 跳转的时候可以在input框中直接加name="continue" οnclick="localtion.href='_b9_shopping_.jsp'"属性 -->
</form>
<form action="_b9_shopping_show.jsp" method="post">
<input type="submit" value="结账" name="final">
</form>
</body>
</html>
_b9_shopping_show.jsp:也需要做一些修改
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>非常感谢您的光临!您购买的商品有:</h2><br>
<%
@SuppressWarnings("unchecked")//添加这个下面的ArrayList警告就会解除
ArrayList<String> l = (ArrayList<String>)session.getAttribute("books");
if(l!=null){
for(int i = 0 ; i < l.size() ; i++){
out.print("商品"+(i+1)+":"+l.get(i)+"<br>");
}
session.setAttribute("books", null);
}
%>
</body>
</html>
说明:
在原本的基础之上,又添加了if语句进行判断
当浏览器完全结束运行时,此时的session就已经结束了
所以,重新运行的时候,就不会再在原本的基础上就行累加