今晚上机考试忘记了一个特别重要的点,session保存的值,是被c:forEah标签的items用来迭代遍历的
记录一个犯过的小错误:
写后端的时候,想要用EL表达式从数据库调出数据信息,其他部分都写的差不多了,但是数据就是出不来,检查了数据访问层(dao)、服务层(service)、servlet,也检查了前端,一直检查不出原因。最后终于发现是因为c:forEach标签的items值写错了,当时理解成了对数据库表的遍历,人傻了…
正确方法:
c:forEach标签的items值需要的是一个集合,用来迭代遍历,而从数据访问层到servlet层,数据信息都储存在session当中,所以需要把session当中存有数据信息的对象调用出来就好了。
代码演示:
数据访问层:截取部分
public List<User> findUser() throws SQLException{
QueryRunner queryRunner = new QueryRunner(C3p0Utils.getDataSource());
String sql = "select * from user";
//BeanHandler<T>,泛型,后跟一个(User.class)
List<User> user = queryRunner.query(sql,new BeanListHandler<User>(User.class));
return user;
服务层:截取部分
public List<User> findAll() throws SQLException{
return userDao.findUser();
}
servlet:
package cn.edu.xit.servlet;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.edu.xit.domain.User;
import cn.edu.xit.service.UserService;
/**
* 显示用户的所有信息
*/
@WebServlet("/FindUserServlet")
public class FindUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public FindUserServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
UserService userService = new UserService();
try{
List<User> user = userService.findAll();
if(user!=null){
request.getSession().setAttribute("user", user); /
//这里的"user"就是被items调用的
response.sendRedirect("list.jsp");
}
}catch(SQLException e){
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request,response);
}
}
前端:截取部分
<tbody>
<c:forEach items="${user}" var="user1" >
<tr>
<td>${user1.id}</td>
<td>${user1.username}</td>
<td>${user1.jobs}</td>
<td>${user1.phone}</td>
<td><a href="DeleteServlet?id=${user1.id}" onclick="return confirm('确认删除')">删除</a>
<a href="updateServlet?id=${user1.id}">修改</a>
</td>
</tr>
</c:forEach>
</tbody>
这里的${user}就是调用session中的user,不是遍历数据库的表也不是遍历封装类。
并且如果开发查找功能的时候,写到servlet层,一般都需要session保存记录。
纠正前(${user}改成其他的值):
纠正后(items = “%{user}”):