可以根據Action屬性的不同將它分為兩類:Field-Driven(屬性驅動) Action和Model-Driven(模型驅動) Action。
一、Field-Driven(屬性驅動)Action,Action擁有自己的屬性,這些屬性一般是Java的基本類型。表單字段直接和Action的屬性 對應。
二、實現了modelDriven接口可以在action中直接獲得例如User對象,它會將Object getModel()取得的User放到ValueStack中。可以理解為將這個User的屬性追加到Action中。它主要是作用是實現類似Struts的FormBean功能。
在struts2中,提供了一種直接使用領域對象的方式,就是讓action實現com.opensymphony.xwork2.ModelDriven接口,ModelDriven讓你可以直接操作應用程序中的領域對象,允許你在web層和業務層使用相同的對象。
ModelDriven接口只有一個方法
public abstract java.lang.Object getModel();
該方法返回一個用於接收用戶輸入數據的對象模型,在這個模型對象中的屬性可以直接通過(屬性名)name來訪問,而不需要使用(對象名.屬性名)vo.name這種格式來訪問了,在action也不需要對對象提供getter和setter方法了,但是必須要在action中進行實例化,獲取參數方式:
1、使用默認的action的傳遞方式,即參數名和屬性名一一對應。
2、自定義一個vo,在action中使用這個vo,view使用vo.屬性名。
3、使用ModelDriven的方式。
ModelDriven的方式:
三種方法的總結:
第一種方法把form的值都放在action文件中,當form提交的項目很多的時候,action的內容將變得很多。項目少的時候可用。
第二種方法將form的值單獨放在vo中,解決了action文件臃腫的問題,同時使form和action分開,較好。但是需要在設置和獲取的jsp頁面上進行標識。
第三種方法在第二種方法的基礎上,通過實現特定的接口,去掉了action中的set和get方法,同時去掉了jsp頁面上的標識。使後台程序的logic更加清晰。