2015年10月9日 星期五

Annotation (Struts2.3.x 十二)

首先必需要有struts2-convention-plugin.jar
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,可以參考這個網頁

沒有留言:

張貼留言