问题描述
在写web项目时,需要将数据动态展示出来,就需要表格标签的动态添加,在不用到JavaScript的情况下,如何使标签动态添加呢,可以使用jsp技术中的<%@ taglib %>,JSTL所支持的迭代标签<c:forEach>
问题解决
1、在官网下载两个关键的包(放在哪里都可以)(https://tomcat.apache.org/taglibs/standard/)
2、将包导入到项目中,我这里以IDEA为例:把这两个包复制粘贴到web项目目录下如图所示处
复制粘贴后,右键选择导入到库,如图所示
3、将如下代码放到.jsp代码的顶部(完整代码放最下面),如图所示
4、将迭代标签<c:forEach>写入需要迭代的表格标签"< tr>"之前,如图所示,具体的用法可以去看<c:forEach>标签的语法定义用法(https://blog.csdn.net/xd15010130025/article/details/89476815),这里不再过多阐述
界面展示
第一次选购
第二次选购
完整代码
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String name = "";
List lis = new ArrayList(); // 用来迭代的对象
float price = 0;
float sum = 0;
int num = 0;
boolean flag = false; // 判断是否选购商品
String[] nums = request.getParameterValues("buy");
for (int i = 0; i < nums.length; i++) {
if (!nums[i].equals("0")) {
Goods.Select(i); // 注意数据库中id要从0开始!!
name = Goods.GetName();
num = Integer.parseInt(nums[i]);
price = Float.parseFloat(Goods.GetPrice());
sum += num * price;
flag = true;
String[] liss = {name, Integer.toString(num), Float.toString(price), Float.toString(num*price)};
lis.add(liss);
}
}
request.setAttribute("lis", lis); // !!!!!很关键!!!调试了很久发现是忘记加这一步!!
if (flag == false) {
out.println("<script type=\"text/javascript\">");
out.println("alert(\"未选购商品!请重新选购!\");");
out.println("</script>");
response.setHeader("refresh", "1;URL=shopping.jsp");
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>购物</title>
</head>
<body>
<table>
<thead>
<tr>
<th>商品名</th>
<th>数量</th>
<th>单价</th>
<th>总价</th>
</tr>
</thead>
<tbody>
<c:forEach items="${lis}" var="li">
<tr>
<td>${li[0]}</td>
<td>${li[1]}</td>
<td>${li[2]}</td>
<td>${li[3]}</td>
</tr>
</c:forEach>
<tr>
<td></td>
<td></td>
<td></td>
<td><%=sum%></td>
</tr>
</tbody>
</table>
<br>
<botton><a href="shopping.jsp">重新选购</a></botton>
<br>
<botton><a href="LoginSuccess.jsp">返回系统首页</a></botton>
</body>
</html>