1. 程式人生 > >Java Struts2 (三)

Java Struts2 (三)

依次 截器 session 一個 返回 property 文件中 查看 per

contextMap中的數據操作

root根:List

元素1

元素2

元素3

元素4

元素5

contextMapMap

key

value

application

Map

key

value

name

test

session

Map

request

Map

attr

Map

1、存數據:

需要熟悉ActionContextvalueStackAPI。框架為我們存數據。

1.1、利用ActionContext
存數據

技術分享

1.2、利用ValueStack存數據

a、如何獲取ValueStack

技術分享

bValueStack中的getRoot()方法:

技術分享

cCompoundRoot是什麽:

技術分享

d、棧操作:

技術分享

2、取數據:用Struts2的標簽(OGNL表達式)JSP上(用的最多)

使用OGNL表達式來去,struts2OGNL表達式必須寫在struts2標簽中。

2.1、使用s:property取數據

a、取contextMap中的數據,需使用#

技術分享技術分享

技術分享

b、取contextMap裏面ValueStack中對象的屬性:直接寫屬性名

技術分享

技術分享

如果遇有對象屬性重名,可以通過

OGNL表達式,選擇查找的起始位置

技術分享

技術分享技術分享

技術分享

特殊說明:當s:property不給定value屬性時,默認取棧頂對象。

技術分享

技術分享

OGNL的使用總結:

1.中對象的屬性不使用#

2.contextMapkey的值,要使用#

2.2ValueStack的其他方法

asetValue方法

技術分享技術分享

技術分享

Jsp頁面上獲取【李四】技術分享技術分享

bset方法

技術分享技術分享技術分享

細節問題:

當按照如下方式,往根中存放數據時,根中元素是什麽順序?

技術分享

使用<s:debug/>標簽查看:

技術分享

cfindValue:我們在Jsp上調用的都是findValue

技術分享技術分享

二、Struts2EL的改變

1Struts2中使用EL的問題:

前提:

我們應該知道,如果我們沒有往值棧()中放入數據的話,那麽我們的動作類默認是在值棧的棧頂。

技術分享技術分享

技術分享技術分享

問題:

我們放到請求域中的屬性,使用EL表達式取出來了。但是放到應用域中的屬性,使用EL表達式沒取出來。

2、關於EL問題的分析:

分析:

我們知道EL表達式是從四大域對象中依次查找屬性。搜索範圍是由小到大。page Scope————>request Scope————>sessionScope————>application Scope

但是通過測試發現,搜索完request範圍後就沒有繼續搜索,而是返回了ValueStack中棧頂對象name屬性的值。

技術分享

技術分享

3Struts2EL查找順序改變總結:

EL表達式: page Scope————>request Scope————>sessionScope————>application Scope

OGNL表達式:page Scope————>request Scope————>valueStack(根中)————>contextMap————>sessionScope————>application Scope

4OGNL的特殊說明:

技術分享技術分享

註意:以下內容知道即可。

技術分享

三、OGNL配合通用標簽的其他使用

1iterator標簽(很重要)

技術分享技術分享

技術分享

2OGNL投影(了解)

2.1、使用過濾條件投影

技術分享

2.2、投影指定屬性

技術分享

3Struts2#,$,%符號的使用(重要)

3.1#

a、取contextMapkey時使用,例如<s:property value="#name" />

bOGNL中創建Map對象時使用,例如:<s:radio list="#{‘male‘:‘‘,‘female‘:‘}" />

3.2$

a、在JSP中使用EL表達式時使用,例如${name}

b、在xml配置文件中,編寫OGNL表達式時使用,例如文件下載時,文件名編碼。

struts.xml——>[email protected](filename)}

3.3%

struts2中,有些標簽的value屬性取值就是一個OGNL表達式,例如<s:property value="OGNL Expression" />

還有一部分標簽,value屬性的取值就是普通字 符串,例如<s:textfield value="username"/>,如果想把一個普通的字符串強制看成時OGNL,就需要使用%{}把字符串套起來。

例如<s:textfield value="%{username}"/>。當然在<s:property value="%{OGNL Expression}" />也可以使用,但不會這麽用。

4、其他標簽

4.1set標簽

技術分享技術分享

4.2action標簽

技術分享技術分享

4.3if標簽,elseif標簽 else標簽

技術分享技術分享

4.4urla標簽(很有用)

技術分享

四、Struts2UI標簽和主題

1Struts2UI標簽的優勢

自動的數據回顯和錯誤提示功能

自帶的簡單樣式和排版

2、表單標簽的通用屬性

說明:UI標簽中value的取值一般都是字符串。

2.1UI標簽的通用屬性

技術分享

2.2、關於checkboxlist的使用:

技術分享

技術分享

技術分享

技術分享

2.3UI標簽的小案例以及模型驅動的分析

技術分享

技術分享

技術分享

3UI標簽的模板(主題)

3.1struts2中默認主題

默認主題的名稱是XHTML,都是在struts的默認屬性文件中定義著:default.properties

技術分享

技術分享技術分享

3.2、更改默認主題

a、更改表單某個元素的默認主題:使用的是表單元素的theme屬性。

技術分享

b、更改表單所有主題:使用的是form標簽的theme屬性。

技術分享

c、更改全站所有表單主題:是在struts.xml配置文件中,覆蓋原有主題的設置。

技術分享

五、防止表單重復提交(攔截器)

1、回顧之前的解決辦法:

技術分享

2Struts2中的解決辦法:

2.1、使用重定向

技術分享

遺留的問題:防不住後退,再提交。

2.2、使用<s:token/>生成令牌配合token攔截器

技術分享

技術分享

點擊後退的時候,會提示:

技術分享

配置結果視圖:

技術分享

遺留的問題:此種解決方式,是產生了錯誤之後再告知用戶,你錯了。

2.3使用<s:token/>生成令牌配合tokensession攔截器

技術分享

Java Struts2 (三)