OGNL (Object-Graph Navigation Language) 是 Struts2 預設表達式語言,支撐數據綁定、類型轉換、集合操作等核心功能。結合 Struts2 標簽庫(<s:property>、<s:iterator>、<s:if> 等)實現視圖層邏輯。本文記錄常用語法與標簽用法。
user.name、user.address.citylist[0]、map['key']user.getFullName()、@java.util.UUID@randomUUID()(靜態方法)+ - * / %、== != < > <= >=、&& || !、in not in{item | item.price > 100}(選擇)、{item.price}(投影)#request、#session、#application、#parameters、#attr[0].top、[1].user.name| 標簽 | 用途 | 示例 |
|---|---|---|
<s:property value="..."/> | 輸出值 | <s:property value="user.name"/> |
<s:if test="..."> | 條件判斷 | <s:if test="user.age > 18">成年</s:if> |
<s:iterator value="..." var="item"> | 遍歷集合 | <s:iterator value="userList" var="u"><s:property value="#u.name"/></s:iterator> |
<s:fielderror/> | 顯示校驗錯誤 | <s:fielderror fieldName="username"/> |
<s:actionerror/> | 顯示 Action 錯誤 | — |
<s:url action="..."/> | 生成 URL | <s:url action="list" var="url"/><a href="%{url}">列表</a> |
<s:form> | 表單標簽 | 自動綁定 Action 屬性 |
<s:textfield/>、<s:password/>、<s:select/> | 表單輸入組件 | 自動綁定、回顯、主題樣式 |
Action 實例被推入值棧頂層,OGNL 表達式默認針對棧頂對象解析。<s:property value="name"/> 相當於 action.getName()。使用 # 訪問非棧頂對象(如 #session.user)。
Struts2 自動將請求參數(字符串)轉換為 Action 屬性類型(基本類型、Date、自定義類)。自定義轉換器實現 TypeConverter,配置 xwork-conversion.properties 或註解 @TypeConversion。
theme="simple" 避免默認表格佈局干擾<s:iterator>,避免 scriptlet<s:fielderror/>、<s:actionerror/>