java之struts2的數據處理

 

這裏的數據處理,指的是頁面上的數據與Action中的數據的處理。java

struts2中有3種方式來接收請求提交的數據。分別是:屬性驅動方式、對象驅動方式、模型驅動方式jsp

 

1. 屬性驅動方式ide

要求頁面中的表單項的名稱與Action處理類中的屬性名同樣,post

而且在Action處理類中提供屬性的get/set方法。這樣就能夠在Action處理方法中獲取表單中的數據值了。this

若是是轉發,也能夠在頁面中經過el表達式把Action處理類的屬性值獲取到${屬性名}。spa

 

add.jspcode

<body>
    <form action="add.action" method="post">
    用戶名:<input type="text" name="name"/><br/>
    年齡:<input type="text" name="age"/><br/>
    性別:<input type="text" name="sex"/><br/>
    電話:<input type="text" name="phone"/><br/>
    <input type="submit" value="submit"/>
    </form>
</body>

UserAction.javaorm

public class UserAction {
    //屬性名必須和表單項的名稱一致,注意命名規範,而且提供get/set方法
    private String name;
    private int age;
    private String sex;
    private String phone;
    //處理結果信息
    private String msg;
    //用戶的添加處理方法
    public String add(){
        System.out.println("name="+name+"\tage="+age+"\tsex="+sex+"\tphone="+phone);
        msg="添加用戶成功";
        return Action.SUCCESS;
    }
public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }

 

struts2會作基本的數據類型轉換。對象

2.對象驅動方式blog

在servlet處理中,獲取表單項的值後,須要手動建立對象。

在struts2中,提供了一種對象驅動方式,能夠直接在Action處理類中獲取對象,再也不須要手動建立對象。

這種方式須要在處理類中聲明對象屬性,在表單項的名稱由 對象名.對象屬性名 組成。

 

User 對象

public class User {
    private String name;
    private int age;
    private String sex;
    private String phone;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

 

addObject.jsp 頁面

<body>
    <form action="addObject.action" method="post">
    用戶名:<input type="text" name="user.name"/><br/>
    年齡:<input type="text" name="user.age"/><br/>
    性別:<input type="text" name="user.sex"/><br/>
    電話:<input type="text" name="user.phone"/><br/>
    <input type="submit" value="submit"/>
    </form>
</body>

UserObjectAction 處理類

public class UserObjectAction {
    private User user;
    private String msg;
public String add(){ System.out.println("name="+user.getName()+"\tage="+user.getAge()+"\tsex="+user.getSex()+"\tphone="+user.getPhone()); msg="數據獲取成功"; return Action.SUCCESS; }
public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }

 

一般使用對象驅動方式

3.模型驅動方式

在對象驅動方式上,能夠實如今處理類中直接獲取對象,可是對象驅動方式相比屬性驅動方式,頁面的編寫更復雜(多寫了對象屬性名),

當屬性很是多時,編寫效率下降。因此,strut2提供了模型驅動。

模型驅動綜合了屬性驅動和對象驅動的優勢,可是模型驅動具備侵入性。

使用模型驅動處理類,須要實現 ModelDriven 接口 。

 

User 類

public class User {
    private String name;
    private int age;
    private String sex;
    private String phone;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

AddModel.jsp

<form action="addModel.action" method="post">
    用戶名:<input type="text" name="name"/><br/>
    年齡:<input type="text" name="age"/><br/>
    性別:<input type="text" name="sex"/><br/>
    電話:<input type="text" name="phone"/><br/>
    <input type="submit" value="submit"/>
    </form>

UserModelAction

public class UserModelAction implements ModelDriven<User>{
    private User user= new User();
    private    String msg;
    public String add(){
        System.out.println("name="+user.getName()+"\tage="+user.getAge()+"\tsex="+user.getSex()+"\tphone="+user.getPhone());
        msg="數據獲取成功";
        return Action.SUCCESS;
    }
    @Override
    public User getModel() {
        return user;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

 

總結:

從3種獲取表單數據的方式中,能夠看出,當不須要再處理類中獲取對象時,應該採用屬性驅動;

當屬性較少,而且須要在處理類中獲取對象時應該採用對象驅動;

當屬性較多,而且須要在處理類中獲取對象時應該採用模型驅動;

實際開發中,跟團隊保持一致。通常都是在對象驅動和模型驅動中選擇

 

補充:

響應數據

在頁面中獲取struts2的響應數據有2個要點:

  1.獲取的數據必須是處理類的屬性,而且提供了get/set 方法

  2.在頁面中能夠經過 el 和 jstl 獲取數據,也能夠經過 ognl 表達式獲取

相關文章
相關標籤/搜索