【问题标题】:Error passing ArrayList from Servlet to JSP将 ArrayList 从 Servlet 传递到 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();
    }

希望你能帮帮我!

【问题讨论】:

    标签: java mysql jsp servlets arraylist


    【解决方案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
        猜你喜欢
        • 2011-05-20
        • 2013-11-15
        • 2014-03-16
        • 2017-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        • 2012-05-03
        相关资源
        最近更新 更多