JSP 中循環獲取 Map 值賦給 List 變量,因變量聲明在循環內導致每次迭代創建新引用,前一次數據丟失。將 List 聲明移至循環外並使用 add 累加可解決。
for (int i = 0; i < listMainBoard.size(); i++) {
// ...
List listSonBoard = (List) mapboard.get(new Integer(mainBoard.getBoardId())); // 循環內聲明
// 每次迭代 listSonBoard 重新賦值,前一次引用丟失
if (listSonBoard != null) {
for (int j = 0; j < listSonBoard.size(); j++) {
// ...
}
}
}
List listSonBoard 在 for 循環內聲明List listSonBoard = ... 重新賦值
List allSonBoards = new ArrayList(); // 循環外聲明累加容器
for (int i = 0; i < listMainBoard.size(); i++) {
Board mainBoard = (Board) listMainBoard.get(i);
// ...
List listSonBoard = (List) mapboard.get(new Integer(mainBoard.getBoardId()));
if (listSonBoard != null) {
allSonBoards.addAll(listSonBoard); // 累加
for (int j = 0; j < listSonBoard.size(); j++) {
Board sonBoard = (Board) listSonBoard.get(j);
// 處理每個子版塊
}
}
}
// 後續使用 allSonBoards 訪問所有子版塊
List current = map.get(key)<c:forEach> 替代 ScriptletList listSonBoard 提高類型安全if (listSonBoard != null && !listSonBoard.isEmpty())