日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2教程(3)--请求参数处理

發(fā)布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2教程(3)--请求参数处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Action處理請求參數(shù)

struts2 和 MVC定義關(guān)系

StrutsPrepareAndExecuteFilter : 控制器

JSP : 視圖

Action : 可以作為模型,也可以是控制器

struts2 Action 接受請求參數(shù) :屬性驅(qū)動 和 模型驅(qū)動

一、Action處理請求參數(shù)三種方式

第一種 :Action 本身作為model對象,通過成員setter封裝 (屬性驅(qū)動 )

頁面

用戶名 <input type="text" name="username" /> <br/>

Action

public class RegistAction1 extends ActionSupport {private String username;public void setUsername(String username) {this.username = username;}}

問題一: Action封裝數(shù)據(jù),會不會有線程問題 ?

??* struts2 Action 是多實例 ,為了在Action封裝數(shù)據(jù) ?(struts1 Action是單例的 )

問題二: 在使用第一種數(shù)據(jù)封裝方式,數(shù)據(jù)封裝到Action屬性中,不可能將Action對象傳遞給 業(yè)務(wù)層

??* 需要再定義單獨JavaBean,將Action屬性封裝到JavaBean

??

第二種 :創(chuàng)建獨立model對象,頁面通過ognl表達式封裝 (屬性驅(qū)動)

頁面

用戶名 <input type="text" name="user.username" /> <br/> ----- 基于OGNL表達式的寫法

Action:

public class RegistAction2 extends ActionSupport {private User user;public void setUser(User user) {this.user = user;}public User getUser() {return user;}}

問題: 誰來完成的參數(shù)封裝

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

第三種?:使用ModelDriven接口,對請求數(shù)據(jù)進行封裝 (模型驅(qū)動 )----- 主流

頁面

用戶名 <input type="text" name="username" /> <br/>


?

Action :

public class RegistAction3 extends ActionSupport implements ModelDriven<User> {private User user = new User(); // 必須手動實例化public User getModel() {return user;}}

?struts2 有很多圍繞模型驅(qū)動的特性

<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>為模型驅(qū)動提供了更多特性

總結(jié):

對比第二種、第三種 :第三種只能在Action中指定一個model對象,第二種可以在Action中定義多個model對象

<input type="text" name="user.username" />

<input type="text" name="product.info" />

二、封裝數(shù)據(jù)到Collection和Map

1) 封裝數(shù)據(jù)到Collection對象

頁面:

產(chǎn)品名稱 <input type="text" name="products[0].name" /><br/>

Action

public class ProductAction extends ActionSupport {private List<Product> products;public List<Product> getProducts() {return products;}public void setProducts(List<Product> products) {this.products = products;}}

2) 封裝數(shù)據(jù)到Map對象

頁面:

產(chǎn)品名稱 <input type="text" name="map['one'].name" /><br/> ======= one是map的鍵值

Action :

public class ProductAction2 extends ActionSupport {private Map<String, Product> map;public Map<String, Product> getMap() {return map;}public void setMap(Map<String, Product> map) {this.map = map;}}

總結(jié)

以上是生活随笔為你收集整理的struts2教程(3)--请求参数处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。