在 Struts 應用中,<html:select> 或 <html:optionsCollection> 渲染下拉選單時,後端需提供 LabelValueBean 集合或 Map。本範例展示一個簡單的數據封裝類 DataBean,根據傳入參數返回對應的顯示文本,模擬動態選項數據源。
public class DataBean {
public DataBean() {
}
/**
* 根據類型代碼返回顯示文本
* @param kind 類型代碼("1" 為特定類型,其他為預設)
* @return 對應的中文描述
*/
public String getField(String kind) {
if ("1".equalsIgnoreCase(kind)) {
return "字段種類1";
} else {
return "其它值";
}
}
}
public ActionForward execute(...) {
DataBean bean = new DataBean();
List options = new ArrayList();
options.add(new LabelValueBean(bean.getField("1"), "1"));
options.add(new LabelValueBean(bean.getField("2"), "2"));
request.setAttribute("fieldOptions", options);
return mapping.findForward("success");
}
<html:select property="selectedField">
<html:optionsCollection name="fieldOptions" property="value" label="label"/>
</html:select>
SYS_DICT (type, code, label, sort_order),DAO 查詢緩存至 ApplicationContext。enum 定義固定選項,自帶 name()/ordinal(),類型安全且可擴展描述字段。| 現象 | 原因 | 解決 |
|---|---|---|
| 下拉框無選項 | Action 未放入集合、或屬性名不匹配 | 檢查 request.setAttribute 名稱與 JSP name 一致 |
| 預設值未選中 | FormBean 屬性值與選項 value 類型不一致(String vs Integer) | 統一用 String,或在 FormBean 中轉型 |
| 中文亂碼 | JSP/請求/響應編碼不一致 | 全鏈路 UTF-8,web.xml 配置 CharacterEncodingFilter |
雖然範例簡單,但體現了「數據封裝 → Action 準備 → JSP 渲染」的經典 MVC 數據流,理解此流程有助於排查複雜表單綁定問題。