1. 程式人生 > >Struts2最新版(2.5.12)快速入門(三) Struts2之Annotation

Struts2最新版(2.5.12)快速入門(三) Struts2之Annotation

          隨著版本不斷的更新,struts2也引進了Annotation的功能,這一改進使得我們的開發效率大大提高,再也不用去配置繁瑣的xml,可以更直觀明瞭的在我們處理業務邏輯的方法,或者Action類前面新增Annotation來實現請求對映、攔截、result等功能,其本質和xml區別並不是很大的。

    1、配置Annotation之前我們需要新增 struts2-convention-plugin-2.5.12 jar包,如果我們這是maven專案,需要在 pom.xml中新增如下jar包依賴。

 

     <dependency> 
	<groupId>org.apache.struts</groupId> 
	<artifactId>struts2-convention-plugin</artifactId> 
	<version>2.5.12</version> 
      </dependency> 

2、Struts2使用Annotation開發需要遵循一些規範:

1、Action要必須繼承ActionSupport父類 

2、Action所在的包名必須以  .action 結尾

 

3、action中常用的Annotation:

1、 @ParentPackage:對應xml配置檔案中的package的父包,一般需要繼承struts-default

2、 @Namespace:對應配置檔案中的nameSpace,名稱空間

3、 @Action,這個Annotation對應<action>節點(寫在方法前面) 

常用屬性屬性: 

value():表示action的請求名稱,對應<action>節點中的name屬性

 

results():表示action的多個result;這個屬性是一個數組屬性,因此可以定義多個Result 

interceptorRefs():表示action的多個攔截器。這個屬性也是一個數組屬性,因此可以定義多個攔截器; 

exceptionMappings():這是異常屬性,它是一個ExceptionMapping的陣列屬性,表示action的異常,在使用時必須引用相應的攔截器 

 4、@Action中results屬性中單個result Annotation的配置:

@Result這個註解對應了<result>節點。這個註解應用於 @Action中results()屬性中

常用屬性屬性:

name():表示action方法的返回值,對應<result>節點的name屬性,預設是success

location():表示View層檔案的位置(<result>對應於此</result>)

type():是result的型別,對應<result>節點的type屬性,預設是dispatcher

例如:(action跳action)

    在位址列輸入 login或login.action控制檯會列印 login、register。

                package com.example.action;
		import org.apache.struts2.convention.annotation.Action;
		import org.apache.struts2.convention.annotation.Result;
		public class LoginAction { 
		 @Action(
			value="login",
			results={ @Result(name="login",location="register",type="chain")}
		)
		public String login(){	
		 	System.out.println("login");
			 return "login";
		 }
						
		  @Action(
			 value="register",
			 results={ @Result(name="success",location="/index.jsp")}
			 )
		 public String register(){
			 System.out.println("register");
			 return "success";
			 }
		 }

           這個例子還是比較容易理解的,我就不過多的解釋啦,需要跳jsp或者其他View層檔案的話,只需要把location的屬性值改為View層檔案的地址即可絕對地址、相對地址都可以

          注意:如果使用Annotation來訪問我們的action,那麼我們的Action類所在的包名,最後一個包的包名必須是以action結尾的。如com.example.action否則struts2會訪問不到的,這也是struts2比較蛋疼的地方之一吧。第一次老夫就是被它坑了!