以Struts2.x(七)為例,可改成以下這個樣子
CRUDAction.java
@Namespaces(value = { @Namespace("/"), @Namespace("/struts2") }) @Actions(value = { @Action(value = "crud1"), @Action(value = "crud2") }) @Results(value = { @Result(name = "success", location = "/struts2/success.jsp"), @Result(name = "input", location = "/struts2/fail.jsp") }) public class CRUDAction extends ActionSupport { @Action(value = "crudI") public String insert() { System.out.println("增"); return null; } @Action(value = "crudD") public void delete() { System.out.println("刪"); } @Action(value = "crudU") public void update() { System.out.println("改"); } @Action(value = "crudQ") public List<String> query() { System.out.println("查"); return null; } }
@裡面的「value=」,可以不寫,不管它裡面有多少field,不打就是value,可以參考我這篇文章
※測試:
開啟伺服器後,網址列會出現http://localhost:8080/Struts2Demo/開頭,Struts2Demo是我的專案名稱
1.在後面加crudI.acion或struts2/crudI.action都會成功,因為@Namespace有設定兩個路徑,其他刪改查都是一樣的意思
2.在後面加crud1.action或struts2/crud1.action(crud1和crud2都可以)也都會跳轉到成功頁
3.@Namespaces、@Actions、@Results 最後都有個「s」,所以裡面都是沒s的,其實如果只要設定一個,就不需要外層的s,只是我舉這個例子會較容易懂
4.@Action裡面有個results屬性,意思和@Result一樣,看你喜歡寫哪裡都行
5.在後面加crud1!insert.action或struts2/crud1!insert.action(crud1和crud2都可以),還是要在struts.xml或struts.properties設定struts.enable.DynamicMethodInvocation是true才可以
6.@ParentPackage
這個Annotation是繼承另外一個package用的
譬如在xml是設定<package extends="">,Annotation就是用這個
7.@InterceptorRefs
攔截器一樣可以設定,@Action也有interceptorRefs屬性,兩者一樣,看你喜歡寫哪裡都行
8.@ExceptionMappings
@Action也有exceptionMappings屬性,兩者一樣,看你喜歡寫哪裡都行
譬如:
@Action( value = "crudI", exceptionMappings = @ExceptionMapping( exception = "java.lang.NullPointerException", result = "success", params = { "key", "value" } )) public String insert() { System.out.println("增"); return null; }
當發生NullPointerException,會導到@Result是success的網頁,而且傳參數過去
其他的Annotation,可以參考這個網頁
沒有留言:
張貼留言