首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SSH2 登錄頁面 NullPointerException:List 集合為空,檢查 Spring 配置與 DAO 查詢

     編輯:程式設計綜合問答

異常堆棧關鍵信息

java.lang.NullPointerException
    at com.gym.action.LoginAction.login(LoginAction.java:42)

第 42 行典型代碼

List list = userDao.findAll(); // userDao 或返回值為 null
for (User u : list) { ... } // 拋出 NPE

三大排查方向

  1. DAO 注入失效:userDao 為 null。檢查 applicationContext.xml 中 <bean id="userDao" class="..."/> 及 Action 中 setUserDao/構造器注入配置。
  2. 查詢返回 null 而非空列表:DAO 實現中 return null; 而非 return Collections.emptyList();。修改 DAO 保證永不返回 null。
  3. 事務/會話管理錯誤:Hibernate Session 已關閉導致懶加載失敗,或事務未提交查不到數據。檢查 OpenSessionInViewFilter 配置。

快速修復模板

// Action 中防御性編程
public String login() {
    List list = userDao != null ? userDao.findAll() : Collections.emptyList();
    if (list.isEmpty()) {
        addActionError("無用戶數據");
        return INPUT;
    }
    // 業務邏輯...
}

調試技巧

  • 在 LoginAction.login 入口打斷點,觀察 userDao 是否為代理對象。
  • 單獨運行 DAO 單元測試(JUnit + Spring Test),隔離 Web 環境驗證查詢邏輯。
  • 啟用 Hibernate SQL 日誌(hibernate.show_sql=true),確認 SQL 執行情況。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved