1. 程式人生 > >struts2 接受引數的兩種方式(屬性驅動和模型驅動)

struts2 接受引數的兩種方式(屬性驅動和模型驅動)

定義:

  • 在struts2中,頁面的資料和action(控制層)傳輸基本上有兩種方式,一個是屬性驅動、另一個是模型驅動。

屬性驅動

  1. 基本資料型別的屬性對應:
    就是Web頁面上html標籤的name屬性或者與屬性相對應的getter/setter相對應。當頁面提交的時候,struts2會自動從request物件裡面把資料取出來,然後按照名稱進行對應,自動設定到Action的屬性裡面去。
    缺點:如果實體屬性太多,相應的getter/setter方法也會很多,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; } public String login(){ return "login"; } } //前臺頁面 <body> <form action="${basePath }/login_login"> 使用者名稱: <input type="text" name="userName" /> 使用者密碼: <input type="text" name="password" /> <input type="submit"
value="提交"/> </form> </body>
  1. 直接使用域物件(推薦用這種):
    為了解決上種方式的問題,struts2提供了直接使用域物件的屬性驅動(即把屬性和對應的getter/setter方法從Action裡面移出去,單獨封裝成一個域物件,然後在Action類中直接使用這個域物件就可以了。需要改變的是,在相應的name屬性上,新增一個域物件的字首,指明這個值到底對應到哪一個域物件裡去。(需要有setter方法)
//前臺頁面
<body>
    <form action="${basePath }/login_login">
    使用者名稱:  <input  type="text" name="user.userName" />
    使用者密碼: <input  type="text" name="user.password" />
            <input type="submit" value="提交"/>
    </form>
</body>

//Action類裡把屬性封裝成了User實體並例項化了一個物件user
public class LoginAction extends ActionSupport{

    //域模型驅動
    User user = new User();

    public String login(){

        return "login";
    }
}

模型驅動

  • 實現方式:讓Action實現一個ModelDriven的介面。這個介面需要我們實現一個getModel的方法,這個方法返回的就是Action所使用的資料模型物件。採用ModelDriven的方式一個Action只需要一個Model,因此web介面裡的name不需要加上字首修飾。(需要有setter方法)
<form action="${basePath }/login_login">
    使用者名稱:  <input  type="text" name="userName" />
    使用者密碼: <input  type="text" name="password" />
            <input type="submit" value="提交"/>
</form>

//LoginAction類
public class LoginAction extends ActionSupport implements ModelDriven{

    User user = new User();//模型驅動也需要例項化

    public String login(){

        return "login";
    }


    @Override
    public Object getModel() {
        return user;
    }
}

相關推薦

struts2 接受引數方式(屬性驅動模型驅動)

定義: 在struts2中,頁面的資料和action(控制層)傳輸基本上有兩種方式,一個是屬性驅動、另一個是模型驅動。 屬性驅動 基本資料型別的屬性對應: 就是Web頁面上html標籤

struts2屬性驅動模型驅動

.Struts2的屬性驅動. Struts2的屬性驅動指的是在action中JSP頁面的每一個form中的name都對應在action中有一個屬性與之對應。   Struts2的模型驅動 Struts2的模型驅動其實和Struts1.x中的ActionForm有點類似,

分散式理論基礎(一)一致性及解決一致性的方式:2PC3PC (轉載 不錯)

分散式理論基礎(一)一致性及解決一致性的兩種方式:2PC和3PC 1 一致性 1.1 簡述 一致性,是指對每個節點一個數據的更新,整個叢集都知道更新,並且是一致的 假設一個具有N個節點的分散式系統,當其滿足以下條件時,我們說這個系統滿足一致性: 全認同: 所有N個節點都認同一個結果 值合法: 該結果必須

測試redis叢集的方式:分片哨兵

import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedi

獲取IOC容器中的bean的方式(idclass)的區別

// ClassPathXmlApplicationContext: 是 ApplicationContext的實現類,從類路徑下來載入配置檔案 ApplicationContext ctx=new ClassPathXmlApplicationContext("a

Django請求處理的方式:FBV CBV

django中請求處理方式有2種:FBV 和 CBV 一、FBV FBV(function base views) 就是在視圖裡使用函式處理請求。 看程式碼: urls.py from django.conf.urls import url, include from myt

Http協議中,主要常見的傳送資料到伺服器有哪方式,這方式的特點區別,以及其在Http協議中的位置

Get 和 Post 的區別兩點: 一、這兩者傳遞引數時所用的編碼不一定是一樣的。在 Tomcat 中似乎 Get 的編碼方式是根據頁面中指定的編碼方式,而 Post 則是一直使用同一種編碼方式,可在 Tomcat 的 server.xml 中配置。 二、使用 Get 的時候,引數會顯示在位址列上,而 Po

實現多執行緒的方式,區別好處有哪些

 一種是擴充套件java.lang.Thread類 另一種是實現java.lang.Runnable介面 區別就是:第一種是擴充套件,第二種是實現 好處就是: 在實際開發中通常以實現Runnable介面為主,因為實現Runnable介面相比繼承Thread類可以避免繼承的侷

Android 跑馬燈效果實現的方式,解決viewpager的衝突問題

第一篇部落格寫一點簡單的東西,多麼的簡單,就是一個跑馬燈,簡單的要死。所以話不多,寫起來。首先我們來講一個段子先緩和一下氣氛。大學的時候,隔壁宿舍老喜歡蹭我的wifi,煩死了,然後我把wifi名改成了:206有個帥哥是誰。密碼是我的名字,媽的看誰還蹭,結果。除了

Struts2屬性驅動模型驅動詳解

    屬性驅動,就是在Action中定義的是和表單中對應的一個個屬性,每個屬性都有對應的get/set方法。當表單提 交到Action後,Struts2將會自動將根據表單的name屬性呼叫Acti

淺談Struts2屬性驅動模型驅動

一直在用Struts2實現MVC,因為相比於Struts1中大量使用request.getparameter在頁面上獲取值,struts2則提供了屬性驅動和模型驅動處理了這一問題。通過這兩個驅動,我們

JAVA中Arrays.sort()使用方式(ComparableComparator介面)對物件或者引用進行排序

package com.dt.Sort; import java.util.Arrays; import java.util.Comparator; /**  * 使用Comparator介面:編寫多個排序方式類實現Comparator介面,並重寫新Comparator介面中的compare()方法 pub

java--(多執行緒建立的方式Thread類Runnable介面)

(一)繼承Thread類建立多執行緒----單執行緒下面的程式碼是一個死迴圈,但是不會執行main裡面的迴圈語句,而是run()裡面的語句,這是因為該程式是一個單執行緒程式,當呼叫MyThread類的run()方法時,遇到死迴圈,迴圈一直進行。因此,MyThread類的列印

百度地圖測載入的 方式 直接載入非同步載入

轉自:http://blog.csdn.net/u014470581/article/details/527808811、直接載入 <html><head>    <metahttp-

服務端客戶端連線的方式,socketDatagramSocket

socket有兩種方式,一種是Serversocket(服務端)和socket(客戶端)的方式(基於tcp/ip的通訊方式)另一種是DatagramSocket(客戶端和服務端)的方式(基於udp的通訊方式)第一種服務端需要繫結埠和ip,客戶端監聽服務端時需要知道服務端的埠和ip(可以不用繫結客戶端的埠和ip

圖片引用的方式background-image的區別

發現問題的地方: 在模擬百度首頁進行製作的時候,在百度的搜尋文字框中有一個小照相機,這個照相機是一個圖片的一部分,在滑鼠移動到這個地方的時候它自動換到圖片的下半部分進行變色,而這個圖片的引用就是使用的background-image引用的,但是使用im

使用 HTTP 協議訪問網路的方式:HttpURLConnection HttpClient

安卓中進行基於HTTP協議的網路訪問 說明: HttpClient (apache開發) HttpURLConnection(google在釋出安卓時在Java基礎上修改得到的) 使用HC(HttpClient)/UC(HttpURLConnect

RTSP流媒體資料傳輸的方式(TCPUDP)

通常情況下rtsp協議中資料傳輸的實現是UDP,因工作需要,想讓rtsp的資料傳輸部分用TCP實現。DarwinStreamingServer伺服器能自適應客戶端發起的資料傳輸請求是用TCP方式,還是用UDP方式,這裡唯一需要解決的是客戶端協議的發起問題,而vlc支援RTS

Java檔案上傳的方式(uploadifySpring預設方式

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ include file="../jsp/include/taglibs.jsp"%> <!DOCTY

ajax與伺服器傳值有方式:get post的區別

get是把引數資料佇列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程。get可以使用瀏覽器的快取機制,別