Java Struts2 (四)

1、contextMap中的數據操做

 

root根:Listjava

元素1session

元素2app

元素3框架

元素4測試

元素5編碼

 

contextMapMapurl

keyspa

value.net

applicationdebug

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

 

 

2、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的特殊說明:

 

 

 

注意:如下內容知道便可。

 

3、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——>${@java.net.URLEncoder.encode(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標籤(頗有用)

 

4、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配置文件中,覆蓋原有主題的設置。

 

5、防止表單重複提交(攔截器)

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

 

2Struts2中的解決辦法:

2.1、使用重定向

 

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

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

 

 

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

 

配置結果視圖:

 

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

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

相關文章
相關標籤/搜索