在修改他人程式碼時,易忽略 ActionForm 與一般請求屬性的綁定差異,導致資料無法正確顯示。
<%
ExpenseItemForm form = (ExpenseItemForm) request.getAttribute("oldexpenseItemForm");
%>
<input name="expenseItemNumber" type="text" class="input"
value="<%=form.getExpenseItemNumber()%>" size="20" />
ExpenseItemForm oldexpenseItemForm = new ExpenseItemForm();
oldexpenseItemForm.setExpenseItemNumber(oldexpenseItemNumber);
// ... 其他屬性設定
request.setAttribute("oldexpenseItemForm", oldexpenseItemForm);
<input name="roleId" class="" id="roleId" size="22"
value="<%=request.getAttribute("roleId")%>" type="hidden" />
<input name="roleId" class="" id="roleId" size="22"
value="${roleId}" type="hidden" />
request.setAttribute("roleId", roleId);
| 項目 | ActionForm (表單物件) | 一般屬性 (單一值) |
|---|---|---|
| JSP 取值方式 | form.getProperty() | request.getAttribute() 或 ${attrName} |
| Controller 存值 | request.setAttribute("formName", formObj) | request.setAttribute("attrName", value) |
| 適用場景 | 多欄位表單、驗證、重複使用 | 單一參數、簡單傳遞、旗標值 |
| 型別安全 | 強型別、編譯期檢查 | 弱型別、執行期轉型 |
${...} 替代 Scriptlet,程式碼更乾淨request.setAttribute 配合 ELvalue="${roleId}" 若 roleId 為 null 會顯示空字串,不會拋出例外