JSP 表單流程跳轉教學:使用 Hidden + ProcessID 控制頁面分派
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1115
⚙️ 為什麼當年這樣設計?
-
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