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

JSP 表格中獲取行數據 ID 的最佳實踐:隱藏域方案

     編輯:程式設計疑難解答

場景描述

JSP 頁面通過 <c:forEach> 遍歷列表渲染表格,每行包含「修改」「刪除」操作。點擊操作時,後端需要知道是哪一行的數據(如管理員 ID)。

表格截圖

核心方案:表單隱藏域攜帶 ID

在每行的操作列放置一個表單,隱藏域存儲該行唯一標識(ID),提交時自動攜帶。

JSP 代碼示例

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<table class="data-table">
    <thead>
        <tr><th>管理員名稱</th><th>郵箱</th><th>操作</th></tr>
    </thead>
    <tbody>
        <c:forEach items="${adminList}" var="admin">
        <tr>
            <td>${admin.name}</td>
            <td>${admin.email}</td>
            <td>
                <!-- 修改表單 -->
                <form action="editAdmin" method="get" style="display:inline;">
                    <input type="hidden" name="id" value="${admin.id}" />
                    <button type="submit" class="btn-edit">修改</button>
                </form>
                <!-- 刪除表單 -->
                <form action="deleteAdmin" method="post" style="display:inline;" onsubmit="return confirm('確定刪除?');">
                    <input type="hidden" name="id" value="${admin.id}" />
                    <button type="submit" class="btn-del">刪除</button>
                </form>
            </td>
        </tr>
        </c:forEach>
    </tbody>
</table>

後端 Controller 接收

@Controller
@RequestMapping("/admin")
public class AdminController {

    @GetMapping("/editAdmin")
    public String edit(@RequestParam("id") Long id, Model model) {
        Admin admin = adminService.findById(id);
        model.addAttribute("admin", admin);
        return "admin/form"; // 跳轉編輯頁
    }

    @PostMapping("/deleteAdmin")
    public String delete(@RequestParam("id") Long id, RedirectAttributes ra) {
        adminService.deleteById(id);
        ra.addFlashAttribute("msg", "刪除成功");
        return "redirect:/admin/list";
    }
}

替代方案對比

方案優點缺點適用場景
隱藏域 + 表單提交RESTful、無 JS 依賴、安全(POST 刪除)、瀏覽器原生支持頁面較多 form 標簽傳統 MVC、安全要求高
JS 綁定點擊事件 + AJAX無刷新體驗好、可批量操作需處理 CSRF、JS 錯誤導致功能失效前後端分離、富交互頁面
鏈接攜帶參數 <a href="del?id=1">簡單GET 請求刪除不安全、暴露 ID、易被爬蟲誤觸發僅查看詳情等安全操作
data-* 屬性 + JS 取值HTML 乾淨依賴 JS、需防 XSSVue/React 等前端框架

安全加固建議

  1. 刪除/修改必須用 POST,防止 CSRF 攻擊(配合 Spring Security @EnableWebSecurity 自動驗證 Token)。
  2. 權限校驗:Controller 層驗證當前用戶是否有權操作該 ID(防止越權)。
  3. 軟刪除:關鍵數據建議邏輯刪除 (deleted=1),保留審計日誌。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved