java.lang.NumberFormatException: For input string: "null"
at java.lang.Integer.parseInt(String.valueOf(session.getAttribute("currentpage")))
Action 中混用了兩種 Session 取得方式:
**兩者不一定指向同一個 Session 實例**,尤其在攔截器、插件、集群、序列化場景下。導致 `getSongByName` 存入的 `currentpage` 用 `request.getSession()` 取不到(為 `null`),轉字串 `"null"` 再 `parseInt` 拋異常。
// 在 Action 實作 SessionAware 接口
public class SongAction extends ActionSupport implements SessionAware {
private Map sessionMap; // Struts2 注入的 Session Map
@Override
public void setSession(Map session) {
this.sessionMap = session;
}
// 存取統一用 sessionMap
public String search() {
// ...
sessionMap.put("songlist", songlist);
sessionMap.put("currentpage", 1); // 直接存 Integer,避免轉型
// ...
}
public String nextPage() {
@SuppressWarnings("unchecked")
List list = (List) sessionMap.get("songlist");
Integer current = (Integer) sessionMap.get("currentpage"); // 直接取 Integer
if (current == null) current = 1;
current++;
sessionMap.put("currentpage", current);
// ...
}
}
<%-- 使用 Struts2 標籤或 EL 表達式,避免直接操作 request.getSession() --%>
<s:if test="%{#session.currentpage != null && #session.pagenumber != null}">
<s:if test="%{#session.currentpage lt #session.pagenumber}">
<a href="SongManage_nextPage">下一頁</a>
</s:if>
</s:if>
`NumberFormatException: "null"` 經典原因是 **Struts2 Session Map 與原生 HttpSession 不一致**。實作 `SessionAware` 統一存取,問題徹底解決。