struts2接收參數的5種方法


這里總結下Struts2接收參數的5種方法。

1. 使用Action的屬性

在action里面定義要接收的參數變量,並提供相應的setter,getter。定義的參數變量需要和提交參數的名稱一致。

並不用做數據類型的轉換,相應提交方式可以用get和post。

簡單舉例

如:login.action?name=yanggb&password=123456

jsp:

<form action="login" method="post" name="form1">
    用戶名:<s:textfield name="username"/><br/>
    密 碼:<s:password name="password"/><br/>
    <s:submit value="提交"/> 
</form>

action:

public class LoginAction extends ActionSupport {  
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    
    public String getPassword() {
        return password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
} 

這樣,在Action就能接收到前端的請求參數。

2. 使用DomainModel

使用這種方式,在Action里面就不用定義很多的屬性,而是用Model層用到的模型,保存它的一個對象。簡單理解就是,從上面的單個參數接收,改為多個參數一起接收到一個對象中。相應提交方式可以用get和post。

簡單示例

如:login.action?loginUser.username=yanggb&loginUser.password=123456

jsp:

<form action="login" method="post" name="form1">
    用戶名:<s:textfield name="loginUser.username"/><br/>
    密 碼:<s:password name="loginUser.password"/><br/>
    <s:submit value="提交"/> 
</form>

action:

public class LoginAction extends ActionSupport {
    // 錯誤的寫法,不能自己實例化,struts會自動實例化
    // private User loginUser = new Users();
    private User loginUser;

    public User getLoginUser() {
        return loginUser;
    }

    public void setLoginUser(User loginUser) {
        this.loginUser = loginUser;
    }
}

entity:

public class User { 
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

這樣,在Action就能接收到前端的請求參數(可以通過實體去取參數)。

3. 使用DTO--數據傳輸對象(Data Transfer Object)

它的作用是接收參數和傳遞參數,並不是項目中的實體類。

如用戶注冊時,會用到確認密碼,所以要先把參數接收過來,做處理后,再傳遞給相應方法去創建User對象。

提交參數的方式和Domain Model方式相同。

簡單示例

如:login.action?userDTO.name=yanggb&userDTO.password=123456

DTO:

public class UserDTO {
    private String name;
    private String password;
    private String confirm;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {  
        this.password = password;  
    }  

    public String getConfirm() {  
        return confirm;  
    }  

    public void setConfirm(String confirm) {  
        this.confirm = confirm;  
    }  
}

Action:

public class LoginAction extends ActionSupport {  
    private UserDTO userDTO;  
  
    public UserDTO getUserDTO() {
        return userDTO;
    }

    public void setUserDTO(UserDTO userDTO) {
        this.userDTO = userDTO;
    }

    public void execeute() {
        System.out.println("姓名: " + userDTO.getName());
    }
}

這樣,在Action就能接收到前端的請求參數(可以通過DTO去取參數)。

4.使用ModelDriven

在創建Action的時候,只要Action實現了ModelDriven接口,就可以去調用接口的getModel()方法去取相關對象。

相應提交方式可以用get和post。

如:login.action?username=yanggb&password=123456

jsp:

<form action="login" method="post" name="form1">
    用戶名:<s:textfield name="username"/><br/>
    密 碼:<s:password name="password"/><br/>
    <s:submit value="提交"/> 
</form>

action:

public class loginAction extends ActionSupport implements ModelDriven<User> {
    private User user = new User(); // 手動實例化

    public User getModel() {        
        return user; // 返回實例
    }     
}

5.使用Request對象

此方法與傳統的JSP等傳接參數一樣,即使用request.getParameter()方法來接收參數。

簡單示例

如:login.action?name=yanggb

action:

public class LoginAction extends ActionSupport {  
    public void execeute() {
        String name = super.getRequest().getParameter("name");
        System.out.println("姓名:" + name); // yanggb
    }
}

這種方式幾乎是最簡單的。

 

"有些事情不是你努力就會有結果,有些人也不是你堅持就能夠留得住。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM