JSP 表單流程跳轉教學:使用 Hidden + ProcessID 控制頁面分派

| Java | 6 Reads

⚙️ 為什麼當年這樣設計?

  • JSP 是頁面 + 邏輯混合

  • Servlet 或 MVC 架構未普及

  • 表單送出一次處理,省去多頁設計

這種方式非常適合那種「一個入口,很多流程」的系統,例如早期政府內網系統、MIS、軍用裝備管理、物品借出系統等。


🧵 主題:老派 JSP 系統中常見的「流程分派模式」解密

在很多舊的 JSP 系統中,經常可以看到這樣的結構:一堆按鈕共用一個表單,按下去之後會跳轉到不同的功能頁面。這一切的祕密,其實就藏在一個 hidden 欄位,與一點點 JavaScript。


🧪 範例說明

我們有三個檔案:

  • index.jsp:按鈕選單

  • main.jsp:處理分派邏輯

  • pageA.jsp / pageB.jsp:功能頁面


🔹 index.jsp(使用者按鈕介面)

<form method="POST" action="main.jsp" onsubmit="return checkSubmit();">
  <input type="hidden" name="ProcessID" value="" />

  <input type="submit" value="功能 A" onclick="setProcessId('A')" />
  <input type="submit" value="功能 B" onclick="setProcessId('B')" />
</form>

<script>
  function setProcessId(pid) {
    document.forms[0].ProcessID.value = pid;
  }

  function checkSubmit() {
    return document.forms[0].ProcessID.value !== "";
  }
</script>

🔹 main.jsp(後端邏輯分派)

<%
String pid = request.getParameter("ProcessID");

if ("A".equals(pid)) {
%>
  <jsp:forward page="pageA.jsp" />
<%
} else if ("B".equals(pid)) {
%>
  <jsp:forward page="pageB.jsp" />
<%
} else {
%>
  <p>未知流程:<%= pid %></p>
<%
}
%>

🔹 pageA.jsp / pageB.jsp

<!-- pageA.jsp -->
<h2>這是功能 A 的頁面</h2>
<!-- pageB.jsp -->
<h2>這是功能 B 的頁面</h2>

🔁 流程圖(純文字)

使用者操作流程:

[ 使用者點擊按鈕:「功能 A」 ]
              │
              ▼
  JavaScript: setProcessId('A')
              │
              ▼
  <input hidden name="ProcessID" value="A">
              │
              ▼
        表單提交到 main.jsp
              │
              ▼
後端 JSP 判斷:
  if ProcessID == 'A' → forward 到 pageA.jsp
  if ProcessID == 'B' → forward 到 pageB.jsp

這種模式的核心邏輯就是:

  • 按鈕只是送出按鈕,但 JavaScript 提前把 ProcessID 設定好

  • 後端只需要看 ProcessID 就能決定要去哪個流程頁面


✅ 優點與適用情境

  • 節省多個表單的設計成本

  • 所有跳轉邏輯集中在一個 JSP 內,便於維護

  • 適合內部管理系統、低頻變更的政府或企業內網系統


⚠️ 注意事項

  • 如果 JavaScript 被禁用,這種方式會失效(hidden 欄位沒被寫入)

  • 建議加強後端驗證,避免非法或不明的 ProcessID 被利用


📌 結語

這種模式雖然「老派」,但在維護傳統系統時非常常見。理解這種流程的運作方式,可以幫助我們:

  • 快速定位跳轉邏輯

  • 分析按鈕和流程的對應關係

  • 甚至能用它快速搭建一個 demo 系統原型

This article was last edited at