将 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");%>
请在两个地方使用相同的范围session
或request
。
【讨论】:
是的,抱歉我发布了另一个代码,现在它已通过请求修复,但我收到了同样的错误。 @JosueP.Corzo:你是怎么解决的?您现在使用session
吗?你能在<% ArrayList<Usuario> u= (ArrayList<Usuario>)session.getAttribute("listado");%>
这行之后打印u
和u.size()
,看看你得到了什么?【参考方案4】:
您不应在 JSP 中使用 scriptlet。您应该在 JSP 中使用 EL 和标签。
例如
$listado
【讨论】:
我知道如何使用它,但我需要用 scriptlet 来做 yuck以上是关于将 ArrayList 从 Servlet 传递到 JSP 时出错的主要内容,如果未能解决你的问题,请参考以下文章
在java中将Arraylist值从servlet传递到JSP?
将 Arraylist 从 Servlet 返回到 DAO,然后返回到 Servlet,然后返回到 Jsp