struts2標(biāo)簽庫----數(shù)據(jù)標(biāo)簽詳解

?????上篇文章我們介紹struts2標(biāo)簽庫中的控制標(biāo)簽的基本使用和部分原理胶果,本篇文章接著了解下標(biāo)簽庫中有關(guān)數(shù)據(jù)標(biāo)簽的使用和原理。主要涉及以下數(shù)據(jù)標(biāo)簽:

  • action標(biāo)簽:用于在視圖頁面跳轉(zhuǎn)到一個Action
  • bean標(biāo)簽:用于創(chuàng)建一個Javabean實例讶迁,按需保存到context中
  • date標(biāo)簽:用于格式化輸出一個日期
  • debug標(biāo)簽:用于調(diào)試查看ognl上下文中內(nèi)容
  • include標(biāo)簽:用于包含其他的jsp或者servlet頁面資源
  • param標(biāo)簽:主要配合別的標(biāo)簽作為子標(biāo)簽使用
  • push標(biāo)簽:用于將某個值放入到root棧頂
  • set標(biāo)簽:設(shè)置一個新變量,放入指定范圍
  • url標(biāo)簽:用于生成一個URL地址

數(shù)據(jù)標(biāo)簽主要是用于提供各種數(shù)據(jù)訪問相關(guān)的功能分井,生成輸出國際化信息等糖驴。上述所列舉的主要是一些常用的,給我們提供較大方便的標(biāo)簽跨琳,具體的每個標(biāo)簽的使用和簡單的原理會在下文介紹自点。

一桐罕、action標(biāo)簽
?????該標(biāo)簽用于向指定的action發(fā)出請求脉让,拉取該action對應(yīng)的視圖頁面資源。它主要有以下幾個屬性:

  • var:該屬性指定放入當(dāng)前action到context中的名稱功炮,如果沒有指定該屬性則不會保存該action到context中
  • name:該屬性指定了需要調(diào)用的action的名稱
  • namespace:該屬性指定該action的命名空間
  • executeResult:該屬性指定了該action最后的視圖頁面是否要被包含到本頁面
  • ignoreContextParams:它指定了本頁面的請求參數(shù)是否要轉(zhuǎn)發(fā)到該action頁面

下面通過幾個示例了解下具體的使用情況:

//定義一個將要被轉(zhuǎn)向的action
public class MyAction implements Action {
    public String execute() throws Exception{
        return ERROR;
    }
}
  <body>
    <h1>this is the index page</h1>
    <s:action name="my" executeResult="true"/>
    <br/>

    <s:debug/>
  </body>

上面的action標(biāo)簽向名稱為my的action轉(zhuǎn)發(fā)請求并指定需要將該action加載的視圖資源返回溅潜,運行截圖如下:

這里寫圖片描述

下面我們修改MyAction:

public class MyAction implements Action {

    private String username;

    public void setUsername(String name){
        this.username = name;
    }
    public String getUsername(){
        return this.username;
    }

    public String execute() throws Exception{
        ActionContext.getContext().put("hello",username);
        return ERROR;
    }
}
  <body>
    <h1>this is the index page</h1>

    <s:action name="my" executeResult="true" ignoreContextParams="false"/>
    <br/>
    <s:debug/>
  </body>

如上述代碼所示,我們在myAction中定義了一個username屬性薪伏,然后直接將它put到context中滚澜,最后在error頁面獲取該值并打印。結(jié)果如下:

這里寫圖片描述

首先我們是在login.jsp頁面(該頁面未給出嫁怀,只有簡單的一個文本框)提交了一個請求參數(shù)到我們的index頁面设捐,在index頁面中借浊,我們使用action標(biāo)簽轉(zhuǎn)發(fā)請求,其中指定該action標(biāo)簽中ignoreContextParams為false表示在被請求的action中會傳入當(dāng)前index頁面的請求參數(shù)萝招。最后我們在MyAction中自動獲取到了該參數(shù)然后交給error頁面輸出蚂斤。該例主要演示ignoreContextParams屬性可以控制是否轉(zhuǎn)發(fā)請求參數(shù)的作用。

二槐沼、bean標(biāo)簽
?????bean標(biāo)簽主要用來創(chuàng)建一個Javabean的實例曙蒸,其中又可以使用param標(biāo)簽為該Javabean實例傳遞屬性值。該標(biāo)簽主要有以下兩個屬性:

  • name:該屬性指定了將要被創(chuàng)建實例的Javabean的類名
  • var:指定了該屬性將會把該實例保存到context中和pageScope中

我們看一個例子:

//定義一個Javabean
public class Walker {
    private String username;
    private int age;

    public void  setUsername(String name){
        this.username =name;
    }
    public String getUsername(){
        return this.username;
    }
    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return this.age;
    }
}
<body>
    <h1>this is the index page</h1>
    <s:bean name="MyPackage.Walker" var="walker">
      <s:param name="username" value="'walker'"/>
      <s:param name="age" value="22"/>
    </s:bean>

    <s:property value="#walker.username"/>
    <br/>
    <s:property value="#walker.age"/>
    <s:debug/>
  </body>

輸出結(jié)果如下:

這里寫圖片描述

上述代碼實例化了一個Javabean實例岗钩,并將它保存到context中纽窟,接著我們輸出該內(nèi)容,需要注意的是param元素中value屬性依然是ognl表達(dá)式兼吓,想要賦值字符串需要單引號臂港。

三、date標(biāo)簽
?????date標(biāo)簽用于格式化輸出一個日期视搏,或者輸出當(dāng)前時刻與指定時間之間的時間差趋艘。該標(biāo)簽主要有以下幾個屬性:

  • format:該屬性的值為一個格式字符串,它用于為指定日期提供輸出格式
  • nice:該屬性用于指定是否需要輸出當(dāng)前時刻與指定時刻之間的時間差
  • name:該屬性接受的是一個具體的時間
  • var:指定了該屬性會將該日期保存到context和pageScope中

需要注意的是凶朗,該標(biāo)簽要么輸出的是指定了格式的日期瓷胧,要么輸出的是具體的時間差。也就是如果指定nice屬性為true棚愤,則不應(yīng)該指定format屬性搓萧,因為nice屬性已經(jīng)指定了該標(biāo)簽將輸出一個時間差格式,如果強行指定format屬性宛畦,該屬性的值將會無效瘸洛。下面我們看幾個例子:

    <body>
    <h1>this is the index page</h1>

    <s:bean name="java.util.Date" var="date"/><br/>
    <s:date name="#date"/><br/>
    <s:date name="#date" format="dd/MM/yyyy"/><br/>

    <%
      Date date = new Date(123123);
      request.setAttribute("date",date);
    %>
    <s:date name="#request.date" nice="true"/>

    <br/>
    <s:debug/>
  </body>

運行結(jié)果如下:

這里寫圖片描述

第一種情況,如果既沒有指定format屬性次和,也沒有指定nice值反肋,那么會使用默認(rèn)的format格式輸出。第二種情況按照指定的格式輸出踏施。第三種情況輸出為指定時間距離當(dāng)前時間的時間差石蔗。

四、debug標(biāo)簽
?????該標(biāo)簽主要用于調(diào)試畅形,查看ValueStack中的各個參數(shù)的實際值的情況养距。

五、include標(biāo)簽
?????include標(biāo)簽主要用于將一個jsp頁面或者servlet頁面包含到本頁面來日熬。該標(biāo)簽只有一個屬性value棍厌,該屬性指定了需要包含的資源位置。我們看幾個例子:

  <body>
    <h1>this is the index page</h1>

    <s:include value="error.jsp"/>

    <br/>
    <s:debug/>
  </body>

結(jié)果如下:

這里寫圖片描述

我們查看源碼:

這里寫圖片描述

該標(biāo)簽很是類似于jsp的編譯指令include。當(dāng)然我們也可以通過param標(biāo)簽傳入?yún)?shù)到被包含的頁面中耘纱。例如:

    <s:include value="error.jsp">
      <s:param name="a" value="'walker'"/>
      <s:param name="b" value="'yam'"/>
      <s:param name="c" value="'cyy'"/>
    </s:include>
這里寫圖片描述

六敬肚、push標(biāo)簽
?????push用于將某個值放到root棧頂,其中有個屬性value表示即將被放入棧頂?shù)脑厥觥O旅婵磦€例子:

  <body>
    <h1>this is the index page</h1>

    <s:bean name="MyPackage.Walker" var="w">
      <s:param name="username" value="'walker'"/>
      <s:param name="age" value="23"/>
    </s:bean>

    <s:push value="#w">
      <s:property value="username"/><br/>
      <s:property value="age"/>
    </s:push>
    <p>離開push標(biāo)簽之后</p>
    <s:property value="username"/>
    <br/>
    <s:debug/>
  </body>

首先我們實例化一個walker類實例并保存到context中帘皿,接著我們在push標(biāo)簽中直接訪問棧頂元素獲取該實例的屬性值。但是我們離開push標(biāo)簽之后就不能獲取該實例的屬性值了畸陡,因為push標(biāo)簽結(jié)束之后會將剛剛放入root棧中的元素移除鹰溜。也就是說我們?nèi)绻胍岩粋€元素送入root棧來方便訪問,那么就必須在push標(biāo)簽內(nèi)部完成訪問操作丁恭。下面是上述代碼的結(jié)果截圖:

這里寫圖片描述

七曹动、set標(biāo)簽
?????set標(biāo)簽用于將某個值放入到指定的范圍內(nèi),可以理解為定義一個新變量并將它放入到指定范圍內(nèi)牲览。該標(biāo)簽主要有以下幾個屬性:

  • scope:指定該變量將會被存放到的范圍墓陈,可以是application,session第献,request贡必,page,action這5個值庸毫。
  • name:該屬性指定了該元素保存的指定范圍內(nèi)的key值
  • value:該屬性指定了將要被存放的實例的值
  • var:該屬性指定了將要存放到context中的元素名稱

下面通過幾個實例了解下基本的使用情況:

  <body>
    <h1>this is the index page</h1>

    <s:bean name="MyPackage.Walker" var="w">
      <s:param name="username" value="'walker'"/>
      <s:param name="age" value="23"/>
    </s:bean>

    <s:set value="#w" name="a" scope="request"/>
    <s:property value="#request.a.username"/>
    <br/>
    <s:debug/>
  </body>

首先我們實例化了一個walker對象仔拟,然后我們將該實例保存到request范圍內(nèi),最后通過property標(biāo)簽取出該數(shù)據(jù)內(nèi)容飒赃。運行截圖如下:

這里寫圖片描述

上述代碼演示的是通過set標(biāo)簽將元素保存到request范圍內(nèi)利花,至于其他范圍內(nèi)的數(shù)據(jù)保存情況類似,此處不再贅述载佳。需要注意一點的是:如果指定將元素保存到action范圍的話炒事,那么該元素不僅會被保存到request中,還會保存到context中蔫慧。

八挠乳、url標(biāo)簽
?????url標(biāo)簽用于生成一個URL地址,該標(biāo)簽主要有以下幾個屬性值:

  • action:指定生成的URL地址為某個action
  • anchor:指定了URL的錨點
  • encode:指定了是否需要對參數(shù)進(jìn)行編碼
  • includeContext:指定是否需要將當(dāng)前上下文包含到該URL中
  • includeParams:該屬性用于指定是否包含請求參數(shù)在URL中姑躲,該屬性的值有以下幾個睡扬,none,all肋联,get威蕉。
  • method:該屬性指定了調(diào)用目的action的某個方法
  • namespace:指定了action的命名空間
  • portletMode:指定結(jié)果頁面的portlet模式
  • scheme:用于設(shè)置scheme屬性
  • value:用于指定生成的URL的值,和action是差不多的橄仍,只是action指定的是action的URL
  • var:指定該屬性會將該URL保存到context中
  • windowState:指定結(jié)果頁面的portlet窗口狀態(tài)

上面簡單介紹各個屬性的作用,單總結(jié)的很是粗暴。下面通過具體的實例來深刻理解下它們各自的作用侮繁。

  <body>
    <h1>this is the index page</h1>
    <s:url value="my" var="u" escapeAmp="false">
      <s:param name="id" value="01"/>
      <s:param name="age" value="22"/>
    </s:url>
    <s:property value="#u"/>
    <br/>
    <s:debug/>
  </body>
生成URL:my?id=1&age=22 

如上所示虑粥,我們指定escapeAmp為false表示用于連接多個參數(shù)的&符號不會被編碼,我們通過param子標(biāo)簽傳入?yún)?shù)作為URL的參數(shù)宪哩,最后生成完整URL娩贷。至于一些其他的屬性值,只有在具體項目使用中才能有更加深刻的體會锁孟,此處沒有比較好的例子彬祖,就不贅述了。

有關(guān)于struts2標(biāo)簽庫的數(shù)據(jù)標(biāo)簽已經(jīng)簡單介紹完了品抽,由于沒有結(jié)合具體的項目储笑,所以介紹的很淺顯,不當(dāng)之處圆恤,望指出突倍!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末白对,一起剝皮案震驚了整個濱河市低散,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌港令,老刑警劉巖淡喜,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秕磷,死亡現(xiàn)場離奇詭異,居然都是意外死亡炼团,警方通過查閱死者的電腦和手機(jī)跳夭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來们镜,“玉大人币叹,你說我怎么就攤上這事∧O粒” “怎么了颈抚?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嚼鹉。 經(jīng)常有香客問我贩汉,道長,這世上最難降的妖魔是什么锚赤? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任匹舞,我火速辦了婚禮,結(jié)果婚禮上线脚,老公的妹妹穿的比我還像新娘赐稽。我一直安慰自己叫榕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布姊舵。 她就那樣靜靜地躺著晰绎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪括丁。 梳的紋絲不亂的頭發(fā)上荞下,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音史飞,去河邊找鬼尖昏。 笑死,一個胖子當(dāng)著我的面吹牛构资,可吹牛的內(nèi)容都是我干的抽诉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚯窥,長吁一口氣:“原來是場噩夢啊……” “哼掸鹅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拦赠,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巍沙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后荷鼠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體句携,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年允乐,在試婚紗的時候發(fā)現(xiàn)自己被綠了矮嫉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡牍疏,死狀恐怖蠢笋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳞陨,我是刑警寧澤昨寞,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站厦滤,受9級特大地震影響援岩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掏导,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一享怀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趟咆,春花似錦添瓷、人聲如沸梅屉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽履植。三九已至计雌,卻和暖如春悄晃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凿滤。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工妈橄, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翁脆。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓眷蚓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親反番。 傳聞我的和親對象是個殘疾皇子沙热,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)罢缸,斷路器篙贸,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,414評論 0 17
  • 前面幾篇文章我們介紹了有關(guān)struts2的基本內(nèi)容枫疆,簡單理解了整個框架的運作流程爵川。從本篇開始我們逐漸了解和使用st...
    Single_YAM閱讀 834評論 0 5
  • HTML標(biāo)簽解釋大全 一、HTML標(biāo)記 標(biāo)簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,243評論 1 41
  • 七十而從心所欲不逾矩息楔。 ——《論語·為政》 我要先講講我和茶的緣分寝贡。 最開始,我認(rèn)為喝功夫茶是一種裝逼的行為值依。當(dāng)時...
    甄三十七閱讀 546評論 2 1