1. 程式人生 > >struts2傳遞引數的三種方式

struts2傳遞引數的三種方式

      作用:每次訪問struts2的任何一個action方法時,若該方法裡面需要物件的值,完全可以用struts2傳遞引數的三種方式:

struts2傳遞引數的三種方式

在傳統的servlet中我們採用request和response傳遞引數,但是struts2如果想用同樣的方式傳遞引數,必須先:

HttpServletRequest req = ServletActionContext.getRequest();

HttpServletResponse resp = ServletActionContext.getResponse();

獲取request和response

除了以上這種方式,struts2還帶了3中傳參方式:

  1. 首先是最簡單的get/set方式:只要在繼承了ActionSupport父類的struts2類中定義私有成員變數(變數名和jsp頁面中上傳引數的name相同),並生成get/set方法,即可直接使用。如:

public class LoginAction extends ActionSupport{

private String username;

public String Login(){

System.out.println(“loginaction:”+username);

}

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

}

jsp的form中中:

<form action="login" method="POST" id="form">
<div class="inputText"><span>使用者名稱: </span><input type="text" name="username" id="username" class="username"></div>
</form>
  1. 在java中我們一般會設定bean類,比如這裡:

public class User{
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
那麼我們再傳參的時候也可以直接傳遞User類

但是為了分清楚jsp傳遞過去的變數時給哪個類的(加入我們的Company類和User類中都有username變數),我們在jsp頁面需要進行改動,在name的值中加上字首(是在action類中宣告的類變數),

public class LoginAction extends ActionSupport{

private User user; //不需要例項化,只需要宣告

public String Login(){

System.out.println(“loginaction:”+user.username);

}

public String getUser() { //也需要有get/set方法
return user;
}
public void setUser(String user) {
this.user = user;
}

}

jsp頁面只改了name的值,注意是user不是User

  <form action="login" method="POST" id="form">
    <div class="inputText"><span>使用者名稱: </span>
    <input type="text" name="user.username" id="username" class="username"></div>
    </form>
  1. 比較推薦的第三種方法,後端和前端耦合較少。
    這種方法action類需要繼承ModelDriven介面。

public class LoginAction extends ActionSupport implements ModelDriven{ //這裡需要把User加上去

private User user=new User(); //和2中不同,需要例項化User

public String Login(){

System.out.println(“loginaction:”+user.username);

}

public User getModel() { //不再需要get/set方法,而是實現ModelDriven介面中的getMode方法,返回值是user。
// TODO Auto-generated method stub
return user;
}

}