将数组与 bean 一起从 servlet 传递到 jsp
Posted
技术标签:
【中文标题】将数组与 bean 一起从 servlet 传递到 jsp【英文标题】:Passing an array from servlet to jsp along with a bean 【发布时间】:2017-09-27 07:06:24 【问题描述】:我将一组bean 从servlet 传递到jsp。我还想为每个 bean 发送状态“onHand”。我正在使用 arrayList 作为状态。
在 Servlet 中:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import pckg.ProductBean;
public class GetProducts extends HttpServlet
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
PrintWriter out = response.getWriter();
Vector<String[]> v = DBHelper.runQuery("SELECT * FROM SKU;");
ProductBean [] beans = new ProductBean[v.size()];
ArrayList<String> onHand=new ArrayList<String>();
//onHand.add("a");
for(int i=0; i < v.size(); i++)
String [] tmp = v.elementAt(i);
Vector<String[]> on = DBHelper.runQuery("SELECT on_hand_quantity FROM on_hand where sku='"+tmp[0]+"' ;");
if((on.size())>0)
String [] tmp1 = on.elementAt(0);
if(Integer.parseInt(tmp1[0])>0)
onHand.add("InStock");
else if(Integer.parseInt(tmp1[0])==0)
onHand.add("MoreOnTheWay");
beans[i] = new ProductBean(tmp[0],tmp[1],tmp[2],tmp[3],tmp[4],
tmp[5],tmp[8],Double.parseDouble(tmp[6]),Double.parseDouble(tmp[7]));
request.setAttribute("p_beans",beans);
request.setAttribute("onHand",onHand);
String toDo = "/WEB-INF/jsp/cameraList.jsp";
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher(toDo);
dispatcher.forward(request, response);
在 JSP 页面中:
<%@ page import = "java.util.*"%>
<%@ page import="java.io.*" %>
<%@ page import="java.net.*" %>
<%@page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<link rel="stylesheet" href="../css/cameraList.css" type="text/css"></link>
<script src="../script/jquery.js"></script>
<script src="../script/cameraList.js"></script>
</head>
<body>
<div id="main">
<% ArrayList<String> onHand=(ArrayList<String>) request.getAttribute("onHand");%>
<c:forEach items="$p_beans" var="item">
<table >
<tr><td rowspan=5><img id="image" src="upload_dir/$item.image" style="height:350px; width:350px; background-color:yellow";></td>
<td><b> $item.vendor $item.model $item.category</b></td></tr>
<tr><td width=45%> Price:$$item.retail</td><td>Status:</td></tr>
<c:url value="/servlet/GetProductDetails?" var="myURL">
<c:param name="sku" value="$item.sku" />
</c:url>
<tr><td><a href="$myURL" >Get Details</a></td>
<c:url value="/servlet/OrderPage" var="cartURL">
<c:param name="itemID" value="$item.sku" />
</c:url>
<td><a href="$cartURL">Add To Cart</a></td></tr>
</table>
</c:forEach>
</div>
</body>
</html>
我在服务器中收到以下错误: 在第 44 行处理 JSP 页面 /WEB-INF/jsp/cameraList.jsp 时发生异常:
41: <body>
42:
43: <div id="main">
44: <% ArrayList<String> onHand=(ArrayList<String>) request.getAttribute("onHand");%>
45: <c:forEach items="$p_beans" var="item">
46:
47: <table >
【问题讨论】:
假设您在控制器中传递一个字符串属性,并在 JSP 中期望一个(ArrayList<String>
。
尝试这样做。 <% ArrayList<String> onHand=(ArrayList<String>) request.getAttribute("onHand");%>
处理 JSP 页面 /WEB-INF/jsp/cameraList.jsp 在第 44 行发生异常:41: 42:43: 44: onHand=(ArrayList <%
String param = request.getAttribute("onHand");
%>
<c:forEach items="$p_beans" var="item">
<tr>
<td>iterated fields</td>
<td>
..
..
<td><%=param%></td>
</tr>
【讨论】:
【参考方案2】:无法从 String 转换为 ArrayList
您的onHand
对象似乎属于String
类型,您正在设置您的servlet/控制器类(使用request.setAttribute("onHand",onHand)
),因此您需要将类型转换为String
而不是ArrayList<String>
,如下所示在您的 JSP 中:
<% String onHand= (String)request.getAttribute("onHand"); %>
另外,重要的一点是您需要使用 request.getAttribute(key) 来检索 JSP 中的对象。
【讨论】:
假设request.getAttribute()
谢谢,更正了错字,即将getAttriute
改为getAttribute
这是我的数组列表: ArrayListrequest.getParameter() 总是返回一个字符串,它主要用于从用户提交的表单中获取数据或从查询字符串中获取数据。 因为您正在调用 getParameter() ,所以它将返回 String ,因此您会收到该异常。
根据您的问题,由于您将 onHand 字段的值设置为请求中的属性,因此您应该在 JSP 中调用 getAttribute() 方法。 getAttribute() 的返回类型是 Object。
【讨论】:
处理 JSP 页面 /WEB-INF/jsp/cameraList.jsp 在第 44 行发生异常 41: 42: 43: 44: onHand=(ArrayList以上是关于将数组与 bean 一起从 servlet 传递到 jsp的主要内容,如果未能解决你的问题,请参考以下文章
servlet怎么从javabean得到表格数据 然后再传给jsp