struts2 接受引數的兩種方式(屬性驅動和模型驅動)
定義:
- 在struts2中,頁面的資料和action(控制層)傳輸基本上有兩種方式,一個是屬性驅動、另一個是模型驅動。
屬性驅動
- 基本資料型別的屬性對應:
就是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>
- 直接使用域物件(推薦用這種):
為了解決上種方式的問題,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有點類似,
分散式理論基礎(一)一致性及解決一致性的兩種方式:2PC和3PC (轉載 不錯)
分散式理論基礎(一)一致性及解決一致性的兩種方式: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的兩種方式(id和class)的區別
// 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()使用兩種方式(Comparable和Comparator介面)對物件或者引用進行排序
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-
服務端和客戶端連線的兩種方式,socket和DatagramSocket
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流媒體資料傳輸的兩種方式(TCP和UDP)
通常情況下rtsp協議中資料傳輸的實現是UDP,因工作需要,想讓rtsp的資料傳輸部分用TCP實現。DarwinStreamingServer伺服器能自適應客戶端發起的資料傳輸請求是用TCP方式,還是用UDP方式,這裡唯一需要解決的是客戶端協議的發起問題,而vlc支援RTS
Java檔案上傳的兩種方式(uploadify和Spring預設方式)
<%@ 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可以使用瀏覽器的快取機制,別