将 ArrayList 从 Servlet 传递到 JSP 时出错

Posted

技术标签:

【中文标题】将 ArrayList 从 Servlet 传递到 JSP 时出错【英文标题】:Error passing ArrayList from Servlet to JSP 【发布时间】:2012-10-22 16:31:08 【问题描述】:

我有一个重要的问题,但我的英语很抱歉,我只知道基本的。好吧,我的问题是我将 ArrayList 从 servlet 传递到 jsp 页面时出错:

<% ArrayList<Usuario> u= (ArrayList<Usuario>)session.getAttribute("listado");%>
<table align="left" cellpadding="0" cellspacing="1">
    <tr bgcolor="blue">
        <td>Usuario</td><td>Nombre</td>
        <td>Apellido</td><td>Clave</td> 
    </tr>
<% for(int i=0;i<u.size();i++) %>
<% Usuario usuario = u.get(i); %>
<tr>
<td> <%= usuario.getUsuario() %></td>
<td> <%= usuario.getNombre() %></td>
<td> <%= usuario.getApellido() %></td>
<td> <%= usuario.getClave() %></td>
</tr>
<% %>


</table>

我就是这样做的,但我收到以下错误:

<% for(int i=0;i<u.size();i++) %>

我做错了什么?我的servlet方法也是这样的:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    RequestDispatcher rd;

    try 
        Connection cn = mysqlConnection.obtenerConexion();
        String sql = "select * from tb_usuario";
        PreparedStatement ps = cn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        ArrayList<Usuario> listado = new ArrayList<Usuario>();
        while (rs.next())
            Usuario usu = new Usuario(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4));
            listado.add(usu);
        
        request.setAttribute("listado", listado);
        request.getRequestDispatcher("/listado.jsp");
     catch (SQLException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    

希望你能帮帮我!

【问题讨论】:

【参考方案1】:

scriptlets不鼓励在 ajsp 页面中使用,请改用JSTL tags。使用c-foreach tag 在您的jsp 页面中遍历您的arrayList。并且您正在请求范围内设置一个属性,并尝试在您的 jsp 的会话范围内获取它。

heres the link 解释 c-foreach 标签

【讨论】:

【参考方案2】:

您正在将值设置为请求范围

  request.setAttribute("listado", listado);

但随后尝试在会话范围内访问它。

 session.getAttribute("listado");

因此你可能会在

中得到一个空指针异常
 u.size()...

尝试在请求范围内访问它

 request.getAttribute("xxxxxx") 

尽量避免在 JSP 中添加 java 代码,这是一种不好的做法。请改用 EL 和 JSTL。你也可以到代码里面的铸造部分..

【讨论】:

【参考方案3】:

您在从session 检索时在request 对象中设置变量,因此该问题不存在。

您正在设置doPost 中的属性,如下所示:

 request.setAttribute("listado", listado);

您正在检索 JSP 中的属性,如下所示:

 <% ArrayList<Usuario> u= (ArrayList<Usuario>)session.getAttribute("listado");%>

请在两个地方使用相同的范围sessionrequest

【讨论】:

是的,抱歉我发布了另一个代码,现在它已通过请求修复,但我收到了同样的错误。 @JosueP.Corzo:你是怎么解决的?您现在使用session 吗?你能在&lt;% ArrayList&lt;Usuario&gt; u= (ArrayList&lt;Usuario&gt;)session.getAttribute("listado");%&gt;这行之后打印uu.size(),看看你得到了什么?【参考方案4】:

您不应在 JSP 中使用 scriptlet。您应该在 JSP 中使用 EL 和标签。

例如

$listado

【讨论】:

我知道如何使用它,但我需要用 scriptlet 来做 yuck

以上是关于将 ArrayList 从 Servlet 传递到 JSP 时出错的主要内容,如果未能解决你的问题,请参考以下文章

将数组与 bean 一起从 servlet 传递到 jsp

在java中将Arraylist值从servlet传递到JSP?

将 Arraylist 从 Servlet 返回到 DAO,然后返回到 Servlet,然后返回到 Jsp

如何将两个不同的 ArrayList 从 Servlet 发送到 JSP

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

Servlet ArrayList 到 JSP(从 Object 到 ArrayList 的未经检查的强制转换)