在 Oracle 資料庫環境下開發 Struts 2 應用時,預設的日期輸出格式往往不符合中文用戶習慣(如美式 MM/dd/yyyy)。本文整理三種主流的日期格式化輸出方案,涵蓋標籤直接格式化、參數嵌套、以及國際化資源檔配置,滿足不同場景需求。
最簡單直接的方式,適合單純的日期顯示需求:
<s:date name="birthday" format="yyyy-MM-dd" />
name:對應 Action 中的日期屬性(需為 java.util.Date 或子類型)format:Java SimpleDateFormat 模式字串1990-05-20當需要在輸入框(<s:textfield> 或原生 <input>)中顯示格式化日期時:
<s:textfield name="birthday">
<s:param name="value">
<s:date name="birthday" format="yyyy-MM-dd" />
</s:param>
</s:textfield>
<input type="text"
value="<s:date name='birthday' format='yyyy-MM-dd' />" />
注意:寫法 B 中引號嵌套需轉義,實際開發建議優先使用寫法 A,可讀性與維護性更佳。
透過 Struts 2 內建的 i18n 機制,將日期格式集中配置於屬性檔,支援多語系自動切換。
struts.custom.i18n.resources=globalMessages
globalMessages_zh_CN.properties(繁體中文環境請用 _zh_TW)
global.datetime={0, date, yyyy-MM-dd HH:mm:ss}
global.date={0, date, yyyy-MM-dd}
globalMessages_en_US.properties
global.datetime={0, date, MM/dd/yyyy HH:mm:ss}
global.date={0, date, MM/dd/yyyy}
MessageFormat 模式:{參數索引, 類型, 模式}date 類型自動套用 SimpleDateFormat<!-- 僅日期 -->
<s:textfield name="birthday" value="%{getText('global.date', {birthday})}" />
<!-- 日期時間 -->
<s:textfield name="birthday" value="%{getText('global.datetime', {birthday})}" />
getText 從資源檔取得模式{birthday} 以陣列方式傳遞參數給 {0}| 維度 | <s:date> 直接用 | <s:param> 嵌套 | 國際化資源檔 |
|---|---|---|---|
| 實作複雜度 | 低 | 中 | 高(需配置多檔案) |
| 多語系支援 | 無(硬編碼) | 無(硬編碼) | 原生支援 |
| 維護性 | 分散在各頁面 | 分散在各頁面 | 集中管理,一處修改全站生效 |
| 適用場景 | 單一語系、簡單顯示 | 表單輸入框顯示 | 企業級、多語系、格式頻繁調整 |
java.util.Date、java.sql.Date 或 Timestamp,字串型別會導致格式化失敗native2ascii 轉換,或改用 XML 格式資源檔(.xml)支援 UTF-8yyyy(年)、MM(月)、dd(日)、HH(24時)、mm(分)、ss(秒),切勿寫錯Struts 2 提供了靈活的日期格式化機制。簡單專案用 <s:date> 即可;表單回顯建議用 <s:param> 嵌套;企業級多語系專案強烈建議採用國際化資源檔方案,將格式與業務邏輯解耦,長期維護成本最低。