系統整理 Struts 2 核心通用標籤(非 UI 標籤)與主題設定機制,涵蓋資料標籤、控制標籤、主題優先級規則,為後續 UI 標籤深入奠基。
<s:action>:頁面直接調用 Actionname:指定 Action 名稱executeResult="true|false"(預設 false):是否包含目標 Action 轉向視圖內容ignoreContextParams="true|false"(預設 false):是否傳遞當前頁請求參數<s:bean>:實例化 JavaBeanname(必填):Bean 完整類名<s:param name="" value=""/> 設定屬性id 可將實例放入 Stack Context<s:param> 設定尚待研究<s:date>:格式化輸出日期/計算時差name(必填):Date 實例(OGNL 運算式)format:格式模式nice="true|false"(預設 false):true 時輸出相對時差(如 "92 days, 9 hours ago"),忽略 formatstruts.date.format,否則用 DateFormat.MEDIUM<% pageContext.setAttribute("now", new Date(107,11,23,13,23,24)); %>
<s:date name="#attr.now" format="yyyy年MM月dd日" nice="false"/> <!-- 2007年12月23日 -->
<s:date name="#attr.now" format="yyyy年MM月dd日" nice="true"/> <!-- 相對時差 -->
<s:include>:包含資源(JSP/Servlet 等)value:資源路徑<s:param> 傳遞參數<s:include value="include-file.jsp">
<s:param name="name" value="Unmi"/>
</s:include>
推測底層同為 RequestDispatcher.include(request,response)。
<s:param>:服務外層標籤傳遞參數服務於 bean、include、url 等標籤。
<s:url>:生成 URL 地址value 或 action 指定 URL,action 會自動補 .actionmethod 指定 Action 方法includeParams:是否包含當前頁參數encode:無論 true/false 似乎都會編碼參數假設當前 URL: https://localhost/TestStruts2/index.jsp?name=unmi
1) <s:url value="Login.action"><s:param name="pass">password</s:param></s:url>
→ Login.action?name=unmi&pass=password
2) <s:url value="/Login.action" includeParams="none"><s:param name="pass">中國</s:param></s:url>
→ /TestStruts2/Login.action?pass=%E4%B8%AD%E5%9B%BD
3) <s:url action="Login" includeContext="false" method="register"><s:param name="pass">password</s:param></s:url>
→ /Login!register.action?name=unmi&pass=password
<s:i18n name="">:指定資源束 baseName<s:text name="">:輸出國際化訊息Struts 2 所有 UI 標籤基於主題與模板,模板是 UI 標籤的外在表現形式。如 <s:select> 根據對應 select 模板生成下拉框。一系列模板形成一個主題。
Struts 1 UI 標籤直接掛鉤 HTML 元素,樣式靠 style/styleClass 指定。Struts 2 透過主題統一風格,而非強制指定單一模板。
theme 屬性<s:form> 的 theme 屬性"theme" 屬性值struts.properties 或 struts.xml 中 struts.ui.theme 常量(預設 xhtml)原則:表單主題設 form 標籤;用戶會話主題設 Session;整個應用主題設常量。