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

Struts2 NullPointerException 排查:voteDAO 未注入導致空指針

     編輯:程式設計疑難解答

異常堆疊關鍵行:

java.lang.NullPointerException
    at com.sanqing.action.AddVoteAction.execute(AddVoteAction.java:44)

問題定位

AddVoteAction 中直接調用 voteDAO.findVoteByName(...),但 voteDAO 為 null,說明依賴注入失敗。

常見原因

  • Struts 配置文件 (struts.xml) 中 Action 類未配置 class 屬性或配置錯誤。
  • Spring 配置中 voteDAO Bean 定義缺失、ID 不匹配、作用域錯誤。
  • Action 類未實現 ModelDriven 或缺少 setVoteDAO setter 方法。
  • 包掃描路徑 (context:component-scan) 未覆蓋 DAO/Action 所在包。

修正代碼:加入防禦性判空

public String execute() {
    if (voteDAO == null) {
        System.err.println("voteDAO 未注入,請檢查 Spring/Struts 配置");
        addActionError("系統內部錯誤:數據訪問組件不可用");
        return ERROR;
    }
    Vote vote = voteDAO.findVoteByName(voteName);
    if (vote == null) {
        addActionMessage("未查詢到該投票記錄");
        return INPUT;
    }
    int voteID = vote.getVoteID();
    // 後續業務邏輯
    return SUCCESS;
}

徹底解決步驟

  1. 檢查控制台啟動日誌,搜尋 voteDAO 相關 Bean 創建信息。
  2. 確認 struts.xml 中 <action class="com.sanqing.action.AddVoteAction"> 類名正確。
  3. 確認 Spring XML 或註解中 @Repository("voteDAO") / @Autowired 匹配。
  4. 重新部署並觀察啟動日誌無報錯。

良習:所有外部依賴(DAO、Service、Util)使用前必須判空,並給出明確錯誤提示,避免 NPE 干擾業務流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved