首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Struts2 國際化屬性檔中的 ${} 語法:其實是 OGNL 而非 EL 表達式

     編輯:程式設計綜合問答

現象與疑惑

在 struts.properties 或 global.properties 中見到 key=${getText('some.key')},誤以為是 JSP EL 表達式 ${...},但 EL 僅能存取屬性 (getter),無法呼叫任意方法。

真相揭曉

Struts 2 在載入國際化資源檔時,會對 ${...} 進行 OGNL 表達式解析,而非 EL。三種 OGNL 引用方式:

語法用途生效範圍
#{...}標籤屬性值、一般邏輯Struts 標籤內 (如 ``)
%{...}標籤字串屬性強制 OGNL 解析Struts 標籤屬性 (如 ``)
${...}國際化檔案、struts.xml 配置檔*.properties、struts.xml

國際化檔案實例

# global.properties
welcome.message = 歡迎, ${session.user.name}!
# 此處 ${} 會在資源檔載入時解析 OGNL,存取 ValueStack / Session

struts.xml 中的應用

<action name="ListPhotos" class="com.example.PhotoAction">
    <result>/photos.jsp?albumId=${albumId}</result>
</action>
# ${albumId} 會從 Action 實例取得 getAlbumId() 返回值

關鍵差異提醒

  • JSP 頁面:${...} 是標準 EL (JSP 2.4+),存取 Page/Request/Session/Application Scope 屬性。
  • Struts 配置/資源檔:${...} 是 OGNL,可呼叫方法、存取 ValueStack、執行運算邏輯。
  • 不要在 JSP 中混用 Struts 標籤 ``,應改用 `` 或直接 `` (預設 OGNL)。

最佳實踐

  1. 國際化檔案僅放靜態文字與簡單佔位符 {0}、{1},配合 `` 格式化。
  2. 複雜動態邏輯移至 Action/Service 層,資源檔保持純粹。
  3. 團隊制定編碼規範:${...} 僅出現在 struts.xml、*.properties;JSP 統一用 EL 或 ``。

搞清 ${...} 在不同檔案類型中代表的解析引擎 (EL vs OGNL),是精通 Struts 2 國際化與配置的關鍵認知。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved