接收頁面傳來的參數方法java
一、第一種:在action中設置相應的變量 session
在相應的action中設置與將要傳進來的參數名相同的變量 dom
eg: 頁面傳給後臺兩個參數 name=chance & age = 1,ide
那麼後臺的action中 要設定這樣的變量:private String name; private int age;同時,必須設置setXXX()和 getXXX()方法this
那麼在訪問action過程當中,struts會自動的爲action中的這兩個變量設置前臺傳來的值 orm
二、第二種:DomainModule對象
domainmodule 中文解釋:域模型接口
domainmodule接收參數的方式就是:在action中設一個module對象(即實體對象)rem
eg: 一個bbs系統,實現用戶註冊模塊,咱們會相應的創建一個 User類get
分析下爲何要用DomainModule來接收參數,咱們從頁面向後臺的action中傳遞參數,action作的處理無非是緊接着再把這個參數傳遞給對應的module,那麼假如咱們的module有100個變量,那麼咱們用第一種方法接收參數時就要在action中設置100個變量,但若是咱們用domainmodule的話就簡單的多
eg:有一個用戶登陸系統,前臺須要向後臺傳遞一個user的name 和 password 兩個屬性,
咱們能夠這麼處理,首先在相應的action中設一個實體對象private User user;(假如咱們已經有了User這個實體類了),
那麼前臺傳遞參數的時候能夠這麼來寫 action?user.name=chance&user.password=123
注意:須要給user設置 set,get方法
下面咱們在來考慮一個問題,一般用戶登陸的時候 除了用戶名,密碼,還會填寫一個 確認密碼(其實這個工做徹底能夠交給客戶端的js來處理,這裏只是爲了說明問題),可是在 User Module抽象封裝的過程它是不會有 confimPassword這一項的,這樣咱們就不能用domainModule來解決這個問題,怎麼辦?
解決方法就是引入 DTO(又叫 do,或vo)data transform object,它的工做就兩點:接收一下,傳遞一下;
接收一下:前臺傳過來的user對象,咱們不直接傳遞給usermodule 而是傳遞給 dto對象,例如userDto(它裏面會有一個confimPassword變量)
傳遞一下:dto接收來參數後 進過一番數據處理,確認密碼輸入正確那麼就會 把 必要的參數變量傳遞給 usermodule
搞定!
第三種: ModuleDriven
這個不是很經常使用,可是這個思想很重要,直接貼上代碼
較特殊,它是Struts2種獨有的一種接收用戶輸入的機制,想在項目中使用模型驅動
(ModelDriven)須要讓Action實現com.opensymphony.xwork2.ModelDriven 接口,使用它
的getModel()方法來通知Struts2要注入的屬性類型,而且聲明屬性時必定要實例化,但不需get,
set方法(這是與第二種方式的區別)。
public class UsersAction extends SuperAction implements ModelDriven<Users> {
/**
*
*/
private static final long serialVersionUID = 1L;
private Users user = new Users();
public String login() {
UsersDAO udao = new UsersDAOImpl();
if (udao.usersLogin(user)) {
// 在session中保存登陸成功的用戶名
session.setAttribute("loginUserName", user.getUsername());
return "login_success";
} else {
return "login_failure";
}
}
// 用戶註銷方法
public String logout() {
if (session.getAttribute("loginUserName") != null) {
session.removeAttribute("loginUserName");
}
return "logout_success";
}
@Override
public Users getModel() {
// TODO Auto-generated method stub
return this.user;
}
}