1. 程式人生 > >Struts2總結---資料封裝機制 (10)

Struts2總結---資料封裝機制 (10)

一,屬性驅動的資料封裝

示例程式碼:

public class AttributeAction extends ActionSupport {
    // 屬性直接放在action類中,並且每一個屬性都得寫get和set方法
    private String name;
    private String passwd;

    // 經過struts2的封裝,可以直接在這裡獲取到我們需要的資料
    // 我們並沒有自己去設定這些屬性的值,都是struts2幫我們做好了
    // 這就是屬性驅動的封裝機制
    public String execute() {
        System.out.println(name);
        System.out.println(passwd);
        return SUCCESS;
    }

    public String getName() {
        return name;
    }

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

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }
}

要使用上面的action我們可以使用下面的form表單來提交:
<%-- 這裡action引數寫的是action的絕對路徑 --%>
<form action="<%=basePath%>normal/AttributeAction" method="post">
    <input type="text" name="name">
    <input type="text" name="passwd">
    <button type="submit">提交</button>
</form>

我們發現這種方法在屬性較少的情況下可取,如果屬性很多,程式碼會很亂,所以有了下面的模型驅動

二,模型驅動

(1),不使用struts2標籤的模型驅動

// 實現ModelDriven介面,泛型中寫我們封裝的資料
public class StudentAction extends ActionSupport implements ModelDriven<User> {
    // 我們必須例項化我們封裝的資料,struts2會直接使用我們的這個類,將資料set進去
    // 所以我們必須在這個類中寫get和set方法
    User u = new User();

    // 實現此介面必須實現的方法,返回我們封裝的資料
    @Override
    public User getModel() {
        return u;
    }

    @Override
    // 這種方法我們完全沒有設定什麼,但是struts2依然為我們將資料放了進去
    // 這裡其實是java反射的應用
    public String execute() throws Exception {
        System.out.println(u.getName());
        System.out.println(u.getPasswd());
        return "success";
    }
}

使用這種action的form表單和屬性驅動的一模一樣

(2)使用struts2標籤的模型驅動

示例程式碼:

// 注意,這裡不用實現ModelDriven介面
// 看馬士兵說的這叫域模型
public class DomainModelAction extends ActionSupport {

    // 注意,這裡不用自己例項化,struts2會幫助我們例項化
    // 所以,user裡面必須有不帶引數的構造方法
    // 同時,注意下面,我們必須寫出user的get和set方法
    User user;

    public String execute() {
        try {
            System.out.println(user.getName());
            System.out.println(user.getPasswd());
        } catch (NullPointerException e) {
            return ERROR;
        }
        return SUCCESS;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

為什麼說是標籤驅動的呢?看下面的form表單:
<form action="normal/DomainModel_add" method="post">
    <%--注意name屬性,必須是我們action中的資料名稱.屬性名--%>
    <input type="text" name="user.name">
    <input type="text" name="user.passwd">
    <button type="submit">提交</button>
</form>

還可以使用struts2的標籤:
<%--這裡定位action的方式是和配置struts.xml差不多,使用namespace和action名--%>
<s:form namespace="/normal" action="DomainModel_add" method="POST">
    <%--name屬性也必須這樣寫--%>
    <s:textfield name="user.name"/>
    <s:password name="user.passwd"/>
    <s:submit>提交</s:submit>
</s:form>

這就是struts2的3種資料封裝機制,核心的機制是Java反射

相關推薦

Struts2總結---資料封裝機制 10

一,屬性驅動的資料封裝 示例程式碼: public class AttributeAction extends ActionSupport { // 屬性直接放在action類中,並且每一個屬性都得寫get和set方法 private String nam

野生前端的資料結構練習10希爾排序,歸併排序,快速排序

一.希爾排序 shell sort也稱縮小增量排序,是對插入排序演算法的改進,其工作原理是定義一個間隔序列來表示排序過程中進行比較的元素之間有多遠的間隔,每次將具有相同間隔的數分為一組,進行插入排序,大部分場景中,間隔是可以提前定義好的,也可以動態生成。在較大的資料集上,希爾排序對於插排的優化效果是非常

Struts2資料封裝機制

Struts2當中資料封裝的三種機制:屬性驅動、標籤驅動、模型驅動。下面來一一介紹。 一、屬性驅動 1、需要提供對應屬性的set方法進行資料的封裝。 2、表單的哪些屬性需要封裝資料,那麼在對應的Act

資料入門10序列化機制,mr流量求和

public class FlowBean implements WritableComparable<FlowBean>{     private String phoneNB;     private long u

基於MVC4+EasyUI的Web開發框架經驗總結10--在Web介面上實現資料的匯入和匯出

資料的匯入匯出,在很多系統裡面都比較常見,這個匯入匯出的操作,在Winform裡面比較容易實現,我曾經在之前的一篇文章《Winform開發框架之通用資料匯入匯出操作》介紹了在Winform裡面的通用匯入匯出模組的設計和開發過程,但在Web上我們應該如何實現呢?本文主要介紹利用MVC4+EasyUI的特點,並結

2、【C++】資料抽象/資料封裝/介面抽象類

一、C++資料抽象 1、定義     資料抽象是指,只向外界提供關鍵資訊,並隱藏其後臺的實現細節,即只表現必要的資訊而不呈現細節。資料抽象是一種依賴於介面和實現分離的程式設計(設計)技術。     C++類為資料抽象提供了可能。它們向外界提供了大量用於操作物件資料的公共方法,也就

T-SQL執行內幕10——讀取資料

本文屬於SQL Server T-SQL執行內幕系列     關係型資料庫的資料訪問操作總是從記憶體的快取中讀取資料而不是從磁碟中讀取。這個快取稱為Buffer Pool。如果資料訪問操作符未能在快取中找到所需的資料,那麼就需要從磁碟中載入

20172310 2017-2018《程式設計與資料結構》第八週學習總結

20172310 2017-2018《程式設計與資料結構》(下)第八週學習總結 教材學習內容總結 1.1、堆 堆(heap):是具有兩個附加屬性的二叉樹。一是堆是一顆完全樹(如果一棵二叉樹是平衡的,即所有葉子都位於h或h-1層,其中h為log2n, 且n是樹中的元素數目,且所有h層中的葉子都位於該

20172310 2017-2018《程式設計與資料結構》第五週學習總結

20172310 2017-2018《程式設計與資料結構》(下)第五週學習總結 教材學習內容總結 第九章_排序與查詢 學習幾種排序演算法,並討論這些演算法的複雜度 9.1查詢(線性查詢與二分查詢演算法) 查詢(searching) 是在某個專案組中尋找某一指定目標元素, 或者確定該組中並不存在

Vue.js10- 兄弟元件共享資料

index.html: <div id="app"> <p>這是index.html</p> <my-gg></my-gg> <hr> <my-dd></my-dd>

利用基本資料封裝如:Integer,Float等實現資料型別轉換

/** * 利用基本資料封裝類進行資料型別轉換 * @author dyh * */ public class TypeConversion { public static void main(String[] args) { //字串轉換為各常用基本資料型別 String str

20172310 2017-2018《程式設計與資料結構》第九周學習總結

20172310 2017-2018《程式設計與資料結構》(下)第九周學習總結 教材學習內容總結 這一章又要學習一個新的體系了——圖 無向圖、有向圖和網路 接下來的例子都是使用這兩個圖 一些共同的基礎概念: 頂點:結點,一般用名字和標籤來表示,如A、B等。 邊:節點之間的連線,用結點對

python資料結構與演算法10

棧棧(stack),有些地⽅稱為堆疊,是⼀種容器,可存⼊資料元素、訪問元 素、刪除元素,它的特點在於只能允許在容器的⼀端(稱為棧頂端指標,英 語:top)進⾏加⼊資料(英語:push)和輸出資料(英語:pop)的運算。 沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最後存⼊的 那個元素,確定了⼀種預

SSM_CRUD新手練習10返回分頁的JSON資料

   我們完成了員工的分頁查詢,但是現在這種做法只能適應瀏覽器和伺服器的互動模式,但在移動網際網路時代,客戶端不僅僅只有瀏覽器,還有安卓和IOS客戶端。我們的解決方式是AJAX+JSON方式來實現平臺無關性。    所以我們現在需要改造我們的查詢。   &

Jmeter4.0----測試資料說明之檢視結果樹10

1.說明 在用jmeter輔助測試的過程中,我們經常需要根據介面返回的相關資訊對我們測試的系統做相應的分析,所以呢,常常會用到jmeter中不同型別的監聽器獲取介面資訊。   2.步驟 第一步: 執行緒組 (滑鼠右鍵)---->新增---->監聽器---->圖形結

Redis學習總結10——快取雪崩、快取穿透、快取併發、快取預熱、快取演算法的概念及解決思路總結

一、快取雪崩 概念: 可能是因為資料未載入到快取中,或者快取同一時間大面積的失效,從而導致所有請求都去查資料庫,導致資料庫CPU和記憶體負載過高,甚至宕機。 解決思路: 1.1、加鎖計數(即限制併發的數量,可以用semphore)或者起一定數量的佇列來避免快取失效時大

Servlet學習總結10監聽器

監聽器概念         Servlet監聽器是Servlet規範中定義的一種特殊類,用於監聽ServletContext、HttpSession和ServletRequest等域物件的建立與銷燬事件,以及監聽這些域物件中屬性發生修改的事件。 監聽物件: Servle

Spring Boot學習總結10——SpringBoot打包成Docker映象

<build><!--定義jar檔名,可以自定義--><finalName>${project.name}-${project.version}</finalN

敏捷開發系列學習總結10——到底什麼是敏捷開發?

1,提要 軟體開發是一個系統工程,包括最初的可行性分析、再到設計、開發、測試、維護等整個生命週期。在這個過程中某些階段的失誤或說是變化,都可能增加整個軟體專案的風險。 如何在保證效率的基礎上還能安計劃

資料求索10: 解決ElasticSearch中文搜尋無結果------ik分詞器的安裝與使用

大資料求索(10): 解決ElasticSearch中文搜尋無結果-----IK中文分詞器的安裝與使用 問題所在 在中文情況下,ES預設分詞器會將漢字切分為一個一個的漢字,所以當搜尋詞語的時候,會發現無法找到結果。 解決辦法 有很多其他的分詞器外掛可以替代,這裡使用最常用