# Struts2 與 JSP [TOC] ### :triangular_flag_on_post: JSP標籤 |說明|語法| |-|-| |輸出|<s:property value=”#x['y']” />| ### :triangular_flag_on_post: type=”chain” ```=xml <result name="toDetail" type="chain"> <param name="namespace">要跳轉的action的路徑</param> <param name="actionName">要跳轉的action的名字</param> <param name="method">要跳轉的method的名字</param> </result> ``` 範例: ```=xml <result type="chain" name="toAaaArticle"> <param name="namespace">/aaa/article</param> <param name="actionName">article/toArticle</param> </result> <result type="chain" name="toBbbArticle"> <param name="namespace">/article</param> <param name="actionName">article/toArticle</param> </result> <result type="chain" name="toCccArticle"> <param name="namespace">/ccc/article</param> <param name="actionName">article/toArticle</param> </result> <result type="chain" name="toArticle"> <param name="namespace">/article</param> <param name="actionName">article/toArticle</param> </result> ``` ### :triangular_flag_on_post: 路徑設定 ```=XML <action name="網址路徑*/*" class="Action名稱" method="{位置}"> <param name="參數名稱">{位置}</param> <param name="參數名稱">值</param> <result name="方法名稱">檔案路徑</result> <result name="方法名稱" type="redirect">檔案路徑</result> </action> ``` 範例: ```=XML <action name="new_*/*" class="newsAction" method="{2}"> <param name="today">{1}</param> <param name="type_id">123</param> <param name="type_name">最新消息</param> <result name="toIndex">/WEB-INF/news/index.jsp</result> <result name="redirectList" type="redirect">${PATH}new_${today}/index.jsp</result> </action> ``` ### :triangular_flag_on_post: xml 強制報錯 ``` <interceptors> <interceptor-stack name="loggingStack"> <interceptor-ref name="defaultStack"> <param name="exception.logEnable">true</param> <param name="exception.logLevel">ERROR</param> </interceptor-ref> </interceptor-stack> </interceptors> ``` 在該ation設定加入此段 ``` <action name="user/*" class="userAction"> <interceptor-ref name="loggingStack"/> <result name="toDetail">/WEBINF/user/detail.jsp</result> ... </action> ``` ### :triangular_flag_on_post: 使用 s:iterator #### 1. 為 XxxAction 新增方法,並提供 getter、setter 方法 ```=Java public class XxxAction { private List<Product> products; public List<Product> getProducts() { return products; public void setProducts(List<Product> products) { this.products = products; } public String list() { products = XxxService.getList(); return "list"; } } ``` #### 2. 於 struts.xml 設定路徑 ```=xml! <action name="products" class="com.winnie.action.XxxAction" method="showProducts"> <result name="list">list.jsp</result> </action> ``` #### 3. list.jsp 使用 s:iterator 跌代 products |語法|回傳|說明| |-|-|-| |value |物件| Action的參數| |var |物件的別名| 表示跌代出來的元素| |st |物件的別名| 表示跌代出來的元素狀態| |st.index |數字型態|表示跌代的索引值,初始值為0| |st.count |數字型態|表示跌代的索引值,初始值為1| |st.first |布林型態|是否為第一個元素| |st.last |布林型態|是否為最後一個元素| |st.odd |布林型態|是否為奇數| |st.even |布林型態|是否為偶數| ```=jsp <s:iterator value="products" var="p" status="st"> <div> <p>${p.id}</p> <p>${p.name}</p> <p>${st.index}</p> <p>${st.count}</p> <p>${st.first}</p> <p>${st.last}</p> <p>${st.odd}</p> <p>${st.even}</p> </div> </s:iterator> ``` --- 參考資料 [Dynamic Method Invocation In Struts 2](https://www.w3schools.blog/dynamic-method-invocation-in-struts-2) [Struts 2 Configuration File](https://www.javatpoint.com/struts-2-configuration-file)