屬性驅動

在Struts2中,可以直接在Action中定義各種Java基本資料型別的欄位,使這些欄位與表單資料相對應,並利用這些欄位進行資料傳遞,如下面程式碼所示:


域驅動

在屬性驅動方式中,如果要傳入的資料很多的話,那麼Action的屬性也會變得很多。再加上屬性有對應的getter/setter方法,Action類的程式碼會非常大,在Action裡編寫業務程式碼時,會使Action非常臃腫,不夠簡潔,因此引入域屬性驅動這種方式獲取請求引數。

域屬性驅動就是將屬性和對應的getter/setter方法提取出來,建立一個JavaBean將其封裝起來,在相應的Action裡直接使用這個物件即可。

UserLogin.jsp

這種方式傳值是必須是“物件.屬性名”,在jsp頁面取值也必須是“物件.屬性名”。為什麼要這麼寫了?因為當我們提交表單資料到Action中的時候,找不到username和password屬性。此時雖然有user物件屬性,但並沒有執行getUser()方法獲取到user物件,而當我們將username寫成user.username,password寫成user.password,那麼username和password就成為user物件的屬性,再提交表單資料的時候,它就會去找Action裡面的user物件,這時就會通過getUser()方法獲取user物件。

UserLoginAction.java


模型驅動

通過模型驅動方式傳遞引數的時候,jsp頁面可以直接試屬性名。使用模型驅動時,必須要求這個Action類實現ModelDriven介面,並重寫getModel()方法。


userLogin.jsp

當表單提交資料到對應的Action時,Struts會建立Action,並把Action放入到值棧的棧頂,並且在值棧中有一個model(這裡是user)屬性,然後通過getModel()方法取出這個model並返回User型別的物件。使用了ModelDriven的方式,一個Action只能對應一個Model,因此不需要新增user字首,頁面上的username對應到這個Model的username屬性。

本人第一次寫部落格,寫的不對的地方還請見諒。