这是我在bean class-- product.java中的函数 我从数据库中选择某些细节,并将数据库中的值放入散列图中。 HashMap是一种类产品。
public HashMap<String,Products> showProducts()
{
HttpServletRequest request = null;
PreparedStatement preparedStatement;
HashMap<String,Products>productMap=new HashMap<String,Products>();
try
{
preparedStatement = con.prepareStatement("select * from productdetails where producttype='toy'");
ResultSet resultSet=preparedStatement.executeQuery();
Products toy=new Products();
while(resultSet.next()){
toy.setProductId(resultSet.getInt(1));
toy.setProductName(resultSet.getString(2));
toy.setProductPrice(resultSet.getInt(3));
productMap.put("toy",toy);
request.setAttribute("productSessionMap",productMap);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return productMap;
}
这是jsp页面
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page import="java.util.Set"%>
<%@page import="java.util.HashMap"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Welcome!!!! <c:out value="${sessionScope.loginBean.userName}"></c:out>
<jsp:useBean id="loginBean" class="com.training.entity.ShoppingCart"
scope="session"></jsp:useBean>
<jsp:setProperty property="*" name="loginBean"/>
<c:set var="status" value="${loginBean.showProducts()}"></c:set>
<c:set var="keys" value="${status.keySet()}"></c:set>
<c:out value="${status.toString()}"></c:out> <!-- This line displays last value of hashmap-!>
<c:forEach var="type" items="${productSessionMap}">
<c:out value="${type[keys]}"></c:out>
</c:forEach>
</body>
</html>
我想使用scriptlet标记迭代并显示jsp中的hashmap中的每个值和键。请帮帮我。
即使我尝试使用scriplet标签..但我只是在迭代时获取hashmap中的最后一个值..
<%
ShoppingCart ob=new ShoppingCart();
HashMap<Integer,Products>newproductMap=new HashMap<Integer,Products>();
newproductMap=ob.showProducts();
Set<Integer>set = newproductMap.keySet();
for(Integer ent:set){
String name=newproductMap.get(ent).getProductName().toString();%>
<%=name%>
<%-- <%String value = ent.getValue().toString();%>
<%=value%>
--%>
<%}%>
答案 0 :(得分:0)
迭代中的每个项目都是Map.Entry的基础。
在这种情况下,您的type
var将是Map.Entry。
您应首先为每个新产品分配一个新密钥
while(resultSet.next()){
toy.setProductId(resultSet.getInt(1));
toy.setProductName(resultSet.getString(2));
toy.setProductPrice(resultSet.getInt(3));
productMap.put(""+resultSet.getInt(1),toy);//here assign a new unique key
}
//this must be moved outside of the while loop
request.setAttribute("productSessionMap",productMap);
然后你可以用$ {type.value}访问每个Map.Entry的值,然后可以访问它的每个属性(类型为Products)来调用它的getter方法 即$ {type.value.productName}
<table>
<tbody>
<tr>
<th>Product Id</th>
<th>Product Name</th>
<th>Product Price</th>
</tr>
<c:forEach items="${requestScope.productSessionMap}" var="type">
<tr>
<td>
<c:out value="${type.key}"></c:out><!-- this is the key you specified in the map i.e. 'productId' -->
</td>
<td>
<c:out value="${type.value.productName}"></c:out>
</td>
<td>
<c:out value="${type.value.productPrice}"></c:out>
</td>
</tr>
</c:forEach>
</tbody>
</table>