繁体   English   中英

List.size() 在我的 jsp 中是 null 但它在我的 servlet 页面中显示结果 [重复]

[英]List.size() is null in my jsp but it shows result in my servlet page [duplicate]

我从 DAO class 中的 MySQL 数据库中检索一组数据,并将数据列表添加到方法中的列表中,然后在我的 servlet 中调用该方法添加到 setAttribute 方法

`public class EventDetailsServlet 扩展 HttpServlet { private static final long serialVersionUID = 1L;

@SuppressWarnings("null")
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    EventDao dao = new EventDao(ConnectionProvider.getConn());
    List<EventDetails> list = dao.events();
    
    req.setAttribute("eventdetails", list);
    
    req.getRequestDispatcher("/coachhome.jsp").forward(req, resp);
    
     if(list==null || list.size()==0){
        System.out.println("Something went wrong!");
        System.out.println(list.size());
     }        
}

}`

当我尝试从 servlet 获取属性并显示大小时,它返回 null 指针异常不知道该怎么办

 <% ArrayList<EventDetails> list = new ArrayList<>(); 
        list = (ArrayList<EventDetails>) request.getAttribute("eventdetails"); 
            
        list.size(); //It gives a null pointer exception in the jsp page 
        %>

我在XML 文件中正确映射了 URL 模式仍然给出这样的错误

但是当我尝试在我的登录 servlet 页面中打印大小时,它会显示结果

这是我的 Dao class,我从数据库中获取数据并存储在我的列表中

public  List<EventDetails> events() {
    ArrayList<EventDetails> list = new ArrayList<>();
            
    try {
        String sql="select * from eventdetails";
        
        PreparedStatement ps = conn.prepareStatement(sql);
        
        ResultSet rs=ps.executeQuery();
        
        while(rs.next()) {
            EventDetails details=new EventDetails();
                    
            details.setEventId(rs.getInt("ideventdetails"));
            details.setClubImage(rs.getBlob("clubImage"));
            details.setEventName(rs.getString("eventName"));
            details.setClubName(rs.getString("clubName"));
            details.setDistrict(rs.getString("district"));
            details.setState(rs.getString("state"));
            details.setStartDate(rs.getDate("startDate"));
            details.setEndDate(rs.getDate("endDate"));
            list.add(details); //add the events to list
            
        }
    }catch(Exception e) {
        e.printStackTrace();
    }
    return list;
}

根据 javadoc,当您在请求上调用setAttribute时,然后使用req.getRequestDispatcher.forward(req, resp)转发它,该属性将传递给您转发到的 servlet。

所以解释必须是以下之一:

  • 您为"eventdetails"设置的值是null ,或者
  • 请求没有从EventDetailsServlet转发到特定的 JSP,或者
  • NPE 未发生在该特定行,或
  • 您正在运行的编译代码(servlet 或 JSP)与您正在查看的不同。

笔记:

  • 编译 JSP 代码时您应该收到 Java 编译警告。 ArrayList<EventDetails>的类型转换正在执行未经检查的转换。
  • 重要的是您在代码中实际将属性设置为什么。 该清单在其他情况下的内容不是确凿的证据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM