Struts2 | 在struts2值棧中存儲(chǔ)數(shù)據(jù)的三種方式

在上一篇文章《深入淺出理解struts2中的值棧》中,我們已經(jīng)了解了struts2為我們提供的一種靈活方便的存儲(chǔ)機(jī)制“值?!薄D敲催@篇文章大家一起來(lái)了解一下往struts2值棧中存儲(chǔ)數(shù)據(jù)的三種方式

1. 使用值棧對(duì)象中的set方法

步驟:

  1. 在action中獲取值棧對(duì)象
  2. 調(diào)用值棧對(duì)象的set方法存值

代碼示例:

public class ValueStackDemoAction extends ActionSupport {
     
    public String execute() throws Exception {
        //1 獲取值棧對(duì)象
        ActionContext context = ActionContext.getContext();
        ValueStack stack = context.getValueStack();

        //2 調(diào)用值棧對(duì)象中的set方法
        stack.set("demo", "DemoData");      
        return "success";
    }
}

set方法使用map方式儲(chǔ)存值,第一個(gè)元素為String類(lèi)型的key,第二個(gè)元素為Object類(lèi)型的value,value中可以存放任意對(duì)象。

使用set方法向值棧中存值后,我們用debug標(biāo)簽來(lái)查看一下值棧的結(jié)構(gòu),如圖:

set方法存值后值棧中的結(jié)構(gòu).png

如圖我們清晰的看到,set方式是使用HashMap的方式將值存入到值棧中,然后取值的時(shí)候更具M(jìn)ap中的key值即可將其value取出。


2. 使用值棧對(duì)象中的push方法

步驟:

  1. 在action中獲取值棧對(duì)象
  2. 調(diào)用值棧對(duì)象的push方法存值

代碼示例:

public class ValueStackDemoAction extends ActionSupport {
     
    public String execute() throws Exception {
        //1 獲取值棧對(duì)象
        ActionContext context = ActionContext.getContext();
        ValueStack stack = context.getValueStack();

        //2 調(diào)用值棧對(duì)象中的push方法
        stack.push("abcd"); 
        return "success";
    }
}

push方法只接收一個(gè)Object類(lèi)型的參數(shù),可以存放任意類(lèi)型的對(duì)象

push方式是自動(dòng)將所存的數(shù)據(jù)轉(zhuǎn)為對(duì)應(yīng)的對(duì)象類(lèi)型,然后放入值棧中,如圖:

push方法存值后值棧中的結(jié)構(gòu).png

3. 在action中定義變量(或?qū)ο螅褂孟鄳?yīng)的get方法(最常用,最重要的方法)

步驟:

  1. 在action定義變量
  2. 生成變量的get方法
  3. 在執(zhí)行方法里面為變量賦值

代碼示例:

public class ValueStackDemoAction extends ActionSupport {
    
    //1. 聲明變量
    public String name;

    //2. 生成變量的get方法
    public String getName(){
        return name;
    }

    //3. 在執(zhí)行方法中為變量賦值
    public String execute() throws Exception {
        name = "DemoData";
        return "success";
    }
}

我們來(lái)看一下使用這種方法存值后值棧中的數(shù)據(jù)結(jié)構(gòu),如圖:

使用變量存值方式存值后值棧的結(jié)構(gòu).png

可以看出這種方式存值不會(huì)在值棧中創(chuàng)建新的對(duì)象,而是直接將值存進(jìn)了值棧中原有的action對(duì)象中,這種方式的好處就是避免了值棧中存儲(chǔ)空間的浪費(fèi),不用為每個(gè)值都分別設(shè)置存儲(chǔ)空間。因此這種方式更加常用。

使用這種方法做一個(gè)向值棧中存放一個(gè)list集合的示例

代碼如下:

  1. User實(shí)體類(lèi)
public class User {

    private String username;
    private String password;
    private String address;
    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;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}
  1. Action類(lèi)
public class ListDemoAction extends ActionSupport {

    // 1. 定義list變量
    private List<User> list = new ArrayList<User>();

    // 2. 生成get方法
    public List<User> getList() {
        return list;
    }
    
    public String execute() throws Exception {
        //3 向list中設(shè)置值
        User user1 = new User();
        user1.setUsername("小奧");
        user1.setPassword("123");
        user1.setAddress("美國(guó)");
        
        User user2 = new User();
        user2.setUsername("小王");
        user2.setPassword("250");
        user2.setAddress("越南");
        
        list.add(user1);
        list.add(user2);
        
        return "success";
    }
  1. 值棧中的結(jié)構(gòu)如下:


    使用第三種方法向值棧中存放list集合后值棧的結(jié)構(gòu).png

由圖可知我們已經(jīng)成功的這個(gè)list集合存放進(jìn)了值棧中。


總結(jié):以上就是我們?cè)赼ction中往值棧中存數(shù)據(jù)的三種方式,其中以第三種方式最為常用。下一篇我們一起了解一下怎樣取出值棧中的值,敬請(qǐng)期待。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,740評(píng)論 18 399
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,634評(píng)論 19 139
  • 概述 什么是Struts2的框架Struts2是Struts1的下一代產(chǎn)品,是在 struts1和WebWork的...
    inke閱讀 2,343評(píng)論 0 50
  • 一、 1、請(qǐng)用Java寫(xiě)一個(gè)冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨(dú)云閱讀 1,500評(píng)論 0 6
  • 題目1: dom對(duì)象的innerText和innerHTML有什么區(qū)別? test.innerHTML:從對(duì)象的起...
    peaceChierdo閱讀 285評(píng)論 0 0

友情鏈接更多精彩內(nèi)容