将数组与 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&lt;String&gt; 尝试这样做。 &lt;% ArrayList&lt;String&gt; onHand=(ArrayList&lt;String&gt;) request.getAttribute("onHand");%&gt; 处理 JSP 页面 /WEB-INF/jsp/cameraList.jsp 在第 44 行发生异常:41: 42:43: 44: onHand=(ArrayList) request.getAttribute("onHand");%> 45: 46: 47:) 【参考方案1】:
 <%
 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&lt;String&gt;,如下所示在您的 JSP 中:

<% String onHand= (String)request.getAttribute("onHand"); %>

另外,重要的一点是您需要使用 request.getAttribute(key) 来检索 JSP 中的对象

【讨论】:

假设request.getAttribute() 谢谢,更正了错字,即将getAttriute改为getAttribute 这是我的数组列表: ArrayList onHand=new ArrayList(); onHand.add("a"); JSP 错误: onHand=(ArrayList) request.getAttribute("onHand");%>【参考方案3】:

request.getParameter() 总是返回一个字符串,它主要用于从用户提交的表单中获取数据或从查询字符串中获取数据。 因为您正在调用 getParameter() ,所以它将返回 String ,因此您会收到该异常。

根据您的问题,由于您将 onHand 字段的值设置为请求中的属性,因此您应该在 JSP 中调用 getAttribute() 方法。 getAttribute() 的返回类型是 Object。

【讨论】:

处理 JSP 页面 /WEB-INF/jsp/cameraList.jsp 在第 44 行发生异常 41: 42: 43: 44: onHand=(ArrayList) request.getAttribute("onHand");%> 45: 46: 47: 请分享您的 servlet 代码,您在其中声明 onHand 变量。 ArrayList onHand=new ArrayList(); onHand.add("a"); request.setAttribute("p_beans",beans); request.setAttribute("onHand",onHand); 你在你的 JSP 中导入了 ArrayList 吗?这可能是导致此错误的唯一原因。 是的。 java.sun.com/jsp/jstl/core" %>

以上是关于将数组与 bean 一起从 servlet 传递到 jsp的主要内容,如果未能解决你的问题,请参考以下文章

Java:如何将值从类/bean传递给servlet

servlet怎么从javabean得到表格数据 然后再传给jsp

ExtJs 3.4:从网格中获取所有记录并将它们传递到 servlet

将javascript数组传递给servlet

将数组从 HTML 传递到 Django 应用程序

servlet 链过滤器