以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,可以參考這個網頁
沒有留言:
張貼留言