JSP中的el表达式$(user[i])不能取值问题的理解
今天用serlvet和jsp实现一个后台数据传输到前端显示的案例,直接看代码。
JSP页面代码:
<h2>表格</h2>
<table>
<%
int i;
for ( i= 0; i < 5; i++) {
%>
<tr>
<td>${users[i].username}</td>
<td>${users[i].password}</td>
<td>${users[i].phone}</td>
</tr>
<%
}
%>
</table>
servlet代码:
@WebServlet("/user")
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ArrayList<User> users = new ArrayList<>();
users.add(new User("yang","123","1231231"));
users.add(new User("wang","123","1231231"));
users.add(new User("haha","123","1231231"));
users.add(new User("lala","123123","1231231"));
req.setAttribute("users",users);
req.getRequestDispatcher("users.jsp").forward(req,resp);
}
}
运行结果:
数据竟然没有显示出来!!!! 后台也没有报错信息
我愣了一下,然后检测了后台代码发现没有什么问题。但是后台的用户数据为什么没有显示呢?
后面我用传统的方式取值:
<table>
<%
List<User> users=(ArrayList)request.getAttribute("users");
for (User user : users) {
%>
<tr>
<td><%=user.getUid()%></td>
<td><%=user.getName()%></td>
<td><%=user.getAge()%></td>
</tr>
<%
}
%>
</table>
发现可以取出来,数据是发送到了前端页面了:
经过分析,可能问题出在el表达式里面,于是我将i改为1,取出第一个用户显示。
我去! 竟然显示出来了!
问题显然易见了,就是这个i没有起到作用,于是我上网搜索相关的文献,但是找了许久都没有提到这个点的,大部分都是利用jstl标签和传统的方式来显示list集合中的数据。
后来我分析之后:因为 i 是java代码块中的变量,el表达式和代码块是没有联系的(el只能取域对象中的数据,域对象:pageContext<request<session<application),所以取不到代码块中的 i 这样解释的话就可以验证为什么 i 没有起到作用了。
那我们只能放弃这种方式,我们可以使用传统方式(上面有) 或 用jstl标签:<c:forEach var=“user” items=&{users} >
使用jstl标签时需要导入jar包和在jsp页面上面加入<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>