一、contextMap中的數據操作 root根:List 元素1 元素2 元素3 元素4 元素5 contextMap:Map key value application Map key value name test session Map request Map attr Map 1、存數據: ...
一、contextMap中的數據操作
root根:List
|
||||||||||||||
contextMap:Map
|
1、存數據:
需要熟悉ActionContext和valueStack的API。框架為我們存數據。
1.1、利用ActionContext存數據
1.2、利用ValueStack存數據
a、如何獲取ValueStack:
b、ValueStack中的getRoot()方法:
c、CompoundRoot是什麼:
d、棧操作:
2、取數據:用Struts2的標簽(OGNL表達式)在JSP上(用的最多)
使用OGNL表達式來去,struts2的OGNL表達式必須寫在struts2標簽中。
2.1、使用s:property取數據
a、取contextMap中的數據,需使用#
b、取contextMap裡面ValueStack中對象的屬性:直接寫屬性名
如果遇有對象屬性重名,可以通過OGNL表達式,選擇查找的起始位置
特殊說明:當s:property不給定value屬性時,預設取棧頂對象。
OGNL的使用總結:
1.取根中對象的屬性,不使用#。
2.取contextMap中key的值,要使用#。
2.2、ValueStack的其他方法:
a、setValue方法
在Jsp頁面上獲取【李四】
b、set方法
細節問題:
當按照如下方式,往根中存放數據時,根中元素是什麼順序?
使用<s:debug/>標簽查看:
c、findValue:我們在Jsp上調用的都是findValue
二、Struts2對EL的改變
1、Struts2中使用EL的問題:
前提:
我們應該知道,如果我們沒有往值棧(根)中放入數據的話,那麼我們的動作類預設是在值棧的棧頂。
問題:
我們放到請求域中的屬性,使用EL表達式取出來了。但是放到應用域中的屬性,使用EL表達式沒取出來。
2、關於EL問題的分析:
分析:
我們知道EL表達式是從四大域對象中依次查找屬性。搜索範圍是由小到大。page Scope————>request Scope————>sessionScope————>application Scope
但是通過測試發現,搜索完request範圍後就沒有繼續搜索,而是返回了ValueStack中棧頂對象name屬性的值。
3、Struts2中EL查找順序改變總結:
EL表達式: page Scope————>request Scope————>sessionScope————>application Scope
OGNL表達式:page Scope————>request Scope————>valueStack(根中)————>contextMap————>sessionScope————>application Scope
4、OGNL的特殊說明:
註意:以下內容知道即可。
三、OGNL配合通用標簽的其他使用
1、iterator標簽(很重要)
2、OGNL投影(瞭解)
2.1、使用過濾條件投影
2.2、投影指定屬性
3、Struts2中#,$,%符號的使用(重要)
3.1、#
a、取contextMap中key時使用,例如<s:property value="#name" />
b、OGNL中創建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.1、set標簽
4.2、action標簽
4.3、if標簽,elseif標簽 else標簽
4.4、url和a標簽(很有用)
四、Struts2的UI標簽和主題
1、Struts2中UI標簽的優勢
自動的數據回顯和錯誤提示功能
自帶的簡單樣式和排版
2、表單標簽的通用屬性
說明:UI標簽中value的取值一般都是字元串。
2.1、UI標簽的通用屬性
2.2、關於checkboxlist的使用:
2.3、UI標簽的小案例以及模型驅動的分析
3、UI標簽的模板(主題)
3.1、struts2中預設主題
預設主題的名稱是XHTML,都是在struts的預設屬性文件中定義著:default.properties
3.2、更改預設主題
a、更改表單某個元素的預設主題:使用的是表單元素的theme屬性。
b、更改表單所有主題:使用的是form標簽的theme屬性。
c、更改全站所有表單主題:是在struts.xml配置文件中,覆蓋原有主題的設置。
五、防止表單重覆提交(攔截器)
1、回顧之前的解決辦法:
2、Struts2中的解決辦法:
2.1、使用重定向
遺留的問題:防不住後退,再提交。
2.2、使用<s:token/>生成令牌配合token攔截器
點擊後退的時候,會提示:
配置結果視圖:
遺留的問題:此種解決方式,是產生了錯誤之後再告知用戶,你錯了。
2.3、使用<s:token/>生成令牌配合tokensession攔截器