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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Struts2 中的数据传输的几种方式

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2 中的数据传输的几种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://blog.csdn.net/li_tengfei/article/details/6098126

?

1.???? 如何將參數從界面傳遞到Action?

你可以把Struts2中的Action看做是Struts1的Action+ActionForm,即只需在Action中定義相關的屬性(要有getters/setters方法),然后界面傳參的名稱跟這些屬性保持一致即可。普通的數據類型,將可自動轉換。(空字符串轉換為int類型時將報錯)

?

2.???? 如何將數據從Action傳輸到JSP?

可通過多種方式傳輸

通過Action的屬性傳輸

直接給action的屬性賦值,在轉向之后的JSP中,直接用標簽<s:property value=”OGNL表達式”/>取出即可。

比如:

public class UserAction {

??? private String username;

??? private Integer age;

??? private boolean valid;

???

??? //查看用戶的詳細信息

??? public String detail(){

??????

?????? username = "張三";

?????? age = 18;

?????? valid = true;

??????

?????? return "detail";

??? }

?

?

在detail.jsp中,引入struts2的taglib,用這些taglib來呈現數據,該action在棧頂,:

?

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

? <body>

username:<s:property value="username"/> <br/>

valid:<s:property value="valid"/> <br/>

age:<s:property value="age"/> <br/>

?

? </body>

</html>

?

?

?

通過ActionContext傳輸

可通過ActionContext.getContext().put()方法來傳值

?

在Action的方法中:

??? public String detail(){

??????

?????? ActionContext.getContext().put("name", "王五");

??????

?????? username = "張三";

??????

?????? ActionContext.getContext().put("username", "李四");

??????

??????

?????? return "detail";

??? }

?

在JSP中:

? <body>

???

??? <!-- 從ActionContext中取name的值 -->

??? name: <s:property value="#name"/> <br/>

???

??? <!-- 先看Action中有沒有name屬性,如果沒有,則到ActionContext中找name的值 -->

??? name: <s:property value="name"/> <br/>

???

??? <!-- 從ActionContext中取username的值 -->

??? username : <s:property value="#username"/> <br/>

???

??? <!-- 從Action對象中取username屬性 -->

??? username : <s:property value="username"/> <br/>

???

? </body>

?

?

通過request/session等傳輸

?

可通過ServletActionContext.getRequest()/getSession()等方法來獲得request/session對象,然后調用其中的setAttribute()方法來傳值。

?

演示各種數據的傳輸、展現技巧!

?

在Action中通過request/session來傳值:

??? public String detail(){

??????

?????? //通過request

?????? ServletActionContext.getRequest().setAttribute("sex", "男");

??????

?????? //通過session

?????? ServletActionContext.getRequest().getSession().setAttribute("address", "北京");

??????

?????? //通過session

?????? ActionContext.getContext().getSession().put("postcode", "1234567");

??????

?????? return "detail";

??? }

?

?

?

在JSP中取值:

?

? <body>

???

??? <!-- 從request中取sex值 -->

??? request.sex = <s:property value="#request.sex"/> <br/>

??? request.sex = <s:property value="#request['sex']"/> <br/>

???

??? <!-- 從session中取值 -->

??? session.address = <s:property value="#session.address"/> <br/>

??? session.postcode = <s:property value="#session.postcode"/> <br/>

???

??? <!-- 依次搜索page/request/session/application scope取值 -->

??? attr.postcode=<s:property value="#attr.postcode"/> <br/>

? </body>

?

傳遞復雜對象及集合對象

?

如果在Action中傳遞一個復雜的對象到JSP,在JSP中,通過OGNL表達式,可以用句點“.”來訪問對象中的屬性。

如果傳遞一個集合對象到JSP,在JSP中可以通過<s:iterator>標簽來訪問集合中的數據。

?

Action中的代碼:

?????? //傳遞復雜對象

?????? User u = new User();

?????? u.setUsername("admin");

?????? Group g = new Group();

?????? g.setName("管理員組");

?????? u.setGroup(g);

?????? ActionContext.getContext().put("user", u);

??????

?????? //列表數據

?????? List list = new ArrayList();

?????? for(int i=0; i<10; i++){

?????????? User user = new User();

?????????? user.setUsername("User"+i);

?????????? user.setAge(10+i);

?????????? list.add(user);

?????? }

?????? ActionContext.getContext().put("users", list);

?

JSP中的代碼:

??? <!-- 通過句點訪問對象的屬性值 -->

??? user.username=<s:property value="#user.username"/> <br/>

??? user.group.name=<s:property value="#user.group.name"/> <br/>

???

??? users: <br/>

??? <s:iterator value="#users">

?????? <!-- 這個訪問的是當前循環的user對象中的username屬性 -->

?????? username:<s:property value="username"/>,<s:property value="age"/> <br/>

??? </s:iterator>

???

??? <!-- 這個訪問的是Action對象中的username屬性 -->

??? username:<s:property value="username"/> <br/>

?

利用OGNL表達式訪問靜態方法、普通的實例方法及Action對象中的方法

?

假設有一個工具類,如下所示:

package cn.com.leadfar.utils;

?

public class Utils {

??? public static String toUpperCase(String str){

?????? return str.toUpperCase();

??? }

???

??? public String toLowerCase(String str){

?????? return str.toLowerCase();

??? }

}

?

?

Action類的定義如下:

public class UserAction {

??? private String username;

??? //查看用戶的詳細信息

??? public String detail(){

?????? ……………………

?????? return "detail";

??? }

???

??? //這個方法可以在JSP中用OGNL表達式直接調用!

??? public Utils getUtils(){

?????? return new Utils();

??? }

?

?

則在JSP中可以直接通過OGNL表達式來訪問這些方法:

<!-- 調用靜態方法 -->

<s:property value="@cn.com.leadfar.utils.Utils@toUpperCase(username)"/>

?

<!-- 利用OGNL表達式創建Utils對象,并調用它的實例方法 -->

<s:property value="new cn.com.leadfar.utils.Utils().toLowerCase(username)"/>

?

<!-- 調用Action對象的getUtils().toLowerCase()方法 -->

<s:property value="utils.toLowerCase(username)"/>

?

【注意,在最新的struts2版本中,要想在JSP中通過OGNL表達式訪問靜態方法,則必須配置如下constant:

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

?

?

如何在iterator循環體內訪問外部的同名屬性?

?

請看下述代碼:

package cn.com.leadfar.struts2.actions;

?

public class User {

??? private String username;

??? public String getUsername() {

?????? return username;

??? }

??? public void setUsername(String username) {

?????? this.username = username;

??? }

???

}

?

?

public class UserAction {

??? private String username;

?

??? //查看用戶的詳細信息

??? public String detail(){

??????

?????? username = "張三";

??????

??????

?????? //列表數據

?????? List list = new ArrayList();

?????? for(int i=0; i<10; i++){

?????????? User user = new User();

?????????? user.setUsername("User"+i);

?????????? list.add(user);

?????? }

?????? ActionContext.getContext().put("users", list);

??????

?????? return "detail";

??? }

?

在JSP中通過<s:iterator>訪問列表數據:

??? <s:iterator value="#users">

?????? <!-- 這個訪問的是當前循環的user對象中的username屬性 -->

<s:property value="username"/>

?????? <s:property value="#root[1].username"/> <br/>

??? </s:iterator>

?

上面這個例子中,<s:property value=”username”>訪問的是當前循環中的user對象的username屬性,而<s:property value=”#root[1].username”/>訪問的是UserAction對象中的username屬性!

總結

以上是生活随笔為你收集整理的Struts2 中的数据传输的几种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费色视频 | 第一章激情艳妇 | 黄色高潮| 精品人妻一区二 | 一区二区欧美视频 | 亚洲欧美日韩动漫 | 黑人无套内谢中国美女 | 欧美激情自拍 | 青春草在线视频免费观看 | 免费午夜视频 | 午夜久久久久久久久久久 | 欧美在线视频一区二区三区 | 亚洲最新av | 99热在线只有精品 | 粗大黑人巨茎大战欧美成人 | 中文字幕在线天堂 | 岛国av免费看 | 健身教练巨大粗爽gay视频 | 白俄罗斯毛片 | 火影忍者羞羞漫画 | 亚洲911精品成人18网站 | 特级淫片aaaaaaa级附近的 | 337p粉嫩大胆色噜噜噜 | 一级香蕉视频在线观看 | 黄色在线观看网站 | 中文字幕亚洲一区二区三区 | 狠狠干伊人| 寡妇av | 星空大象在线观看免费播放 | 国内一区二区 | 欧美精品亚洲 | 西西444www大胆无视频 | 新天堂av | 青娱乐97 | 一二三四区视频 | 精品国产91久久久久久 | 日本不卡一二三 | 亚洲成人免费影院 | 一本一本久久a久久精品综合麻豆 | 欧美午夜网站 | 色悠悠国产精品 | 久久精品中文 | 欧美日韩国产综合网 | 伊人久久香 | 干操网| 黄色三级图片 | 欧美黄色一级 | 欧洲一区二区视频 | 久热精品在线观看视频 | 欧美激情在线播放 | 色www情| 91精品久久久久久久99蜜桃 | 在线看你懂 | 女人扒开双腿让男人捅 | 在线观看你懂的网址 | 一级特黄a | 好男人www | 在线观看911视频 | 亚洲国产专区 | 精品视频一区二区在线观看 | 人人澡人人澡人人澡 | 手机看片日本 | 免费黄视频在线观看 | 伊人中文字幕在线观看 | www.久久精品视频 | av中文在线天堂 | 欧美亚洲综合另类 | 制服丝袜国产在线 | 成人亚洲一区 | 中文字幕免费av | 日韩av免费播放 | 人人干人人澡 | 伊人夜色| 免费观看在线播放 | 午夜精产品一区二区在线观看的 | 日本精品网 | 另类毛片| 国产黄色免费在线观看 | 欧美亚洲精品天堂 | 美乳人妻一区二区三区 | 日韩卡一卡二 | 欧美1区2区3区 | 特级西西444www大精品视频免费看 | 国产日韩欧美久久 | 日本成人激情 | 91视频综合网 | 三级免费 | 超碰狠狠操 | 久久人人视频 | 毛片网站免费 | 日韩一区二区a片免费观看 伊人网综合在线 | 日韩一区在线免费观看 | 国产精品久久无码一三区 | 国产熟女一区二区三区四区 | 日韩成人精品一区二区三区 | 91国产免费观看 | 国产免费黄色 | 69性视频 | 捆绑凌虐一区二区三区 |