struts2教程(10)
struts2 標(biāo)簽庫
tag-reference.html 就是 struts2標(biāo)簽規(guī)范
一、 通用標(biāo)簽庫 的學(xué)習(xí)
<s:property> 解析ognl表達(dá)式,設(shè)置默認(rèn)值,設(shè)置內(nèi)容是否HTML轉(zhuǎn)義
<s:set> 向四個數(shù)據(jù)范圍保存數(shù)據(jù)
<s:iterator> 遍歷值棧中數(shù)據(jù)
<s:if> <s:elseif> <s:else> 進(jìn)行條件判斷 -------- elseif可以有多個
<s:url> 進(jìn)行URL重寫(追蹤Session) ,結(jié)合s:param進(jìn)行參數(shù)編碼
<s:url action="download" namespace="/" var="myurl">
<s:param name="filename" value="%{'MIME協(xié)議簡介.txt'}"></s:param>
</s:url>
<s:property value="#myurl"/>
<s:a> 對一個鏈接 進(jìn)行參數(shù)編碼
<s:a action="download" namespace="/" >下載MIME協(xié)議簡介.txt
<s:param name="filename" value="%{'MIME協(xié)議簡介.txt'}"></s:param>
</s:a>
OGNL 了解部分 : 支持賦值操作和表達(dá)式串聯(lián) 、 操作集合對象
1) 在值棧中保存一個對象
<s:property value="price=1000,name='冰箱',getPrice()"/> 自動查找值棧中price 和name 屬性 為其賦值
2) ognl操作集合
<s:property value="products[0].name"/> 訪問集合第一個元素name屬性
<s:property value="map['name']"/> 訪問map中key為name的值
{} 直接構(gòu)造List元素、 #{}直接構(gòu)造 Map元素
<s:iterator value="{'aaa','bbb'}" var="s">
<s:property value="#s"/>
</s:iterator>
<s:iterator value="#{'ccc':'111','ddd':'222' }" var="entry">
<s:property value="#entry.key"/>
</s:iterator>
二、 UI標(biāo)簽庫的學(xué)習(xí) (Form標(biāo)簽)
使用struts2 form標(biāo)簽 好處 : 支持?jǐn)?shù)據(jù)回顯 , 布局排班(基于Freemarker模板定義 )
1、struts2 表單標(biāo)簽 value屬性。 必須寫%{} 進(jìn)行設(shè)值
使用struts2表單標(biāo)簽前, 必須配置StrutsPrepareAndExecuteFilter
The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag
<s:form> 表單標(biāo)簽
<s:form action="regist" namespace="/" method="post" theme="xhtml"> --- theme="xhtml"默認(rèn)布局樣式
<s:textfield> 生成 <input type="text" >
<s:password > 生成 <input type="password" >
<s:submit type="submit" value="注冊"/>生成 <input type="submit" >
<s:reset type="reset" value="重置" />生成 <input type="reset" >
<s:textarea> 生成 <textarea>多行文本框
<s:checkboxlist> 生成一組checkbox
2、使用ognl構(gòu)造Map (看到值和提交值 不同時)
<s:checkboxlist list="#{'sport':'體育','read':'讀書','music':'音樂' }" name="hobby"></s:checkboxlist>
<s:radio> 生成一組radio
3、使用 ognl構(gòu)造List (看到內(nèi)容和提交值 相同時)
<s:radio list="{'男','女'}" name="gender"></s:radio>
<s:select> 生成一個<select>
<s:select list="{'北京','上海','南京','廣州'}" name="city"></s:select>
4、struts2 開發(fā) 密碼框 默認(rèn)不回顯
<s:password name="password" id="password" showPassword="true"/>
5、 頁面元素主題設(shè)置
default.properties ---- struts.ui.theme=xhtml 設(shè)置struts2 頁面元素使用默認(rèn)主題
struts.ui.templateSuffix=ftl 默認(rèn)模板引擎 Freemarker
修改主題
方式一 :<s:textfield name="username" label="用戶名“theme="simple"></s:textfield> 只對當(dāng)前元素有效
方式二 :<s:form action="" method="post" namespace="/ui“ theme="simple">對form中所有元素有效
方式三 : struts.xml
<constant name="struts.ui.theme" value="simple"></constant> 修改默認(rèn)主題樣式,頁面所有元素都有效
優(yōu)先級 :方式一 > 方式二 >方式三
三、防止表單重復(fù)提交原理
表單防止重復(fù)提交
表單重復(fù)提交 危害:刷票、 重復(fù)注冊、帶來服務(wù)器訪問壓力(拒絕服務(wù))
1、 在jsp通過 <s:token />生成令牌號
生成表單隱藏域
將令牌號保存到Session
2、 通過struts2提供 tokenIntercetor攔截器 完成請求中令牌號 和 session中令牌號 比較
<interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/><action name="token" class="cn.itcast.struts2.TokenAction"><result>/index.jsp</result><!-- 重新定義攔截器 --><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="token"></interceptor-ref></action>3、 當(dāng)表單重復(fù)提交時,token攔截器自動跳轉(zhuǎn)result name="invalid.token"
通過 <s:actionError/> 顯示錯誤信息
覆蓋重復(fù)提交信息 struts.messages.invalid.token=您已經(jīng)重復(fù)提交表單,請刷新后重試
四、Struts2 內(nèi)置json插件
知識點 :struts2的 Ajax開發(fā)
Ajax開發(fā)客戶端 和 服務(wù)器交互數(shù)據(jù)格式 --------------- json
json 是最輕量級,體積最小
服務(wù)器將程序處理結(jié)果,轉(zhuǎn)換為json格式發(fā)送給 客戶端
json-lib 、 flexjson 工具類庫
struts2-json-plugin-2.3.7.jar
案例一: 輸入用戶名,鼠標(biāo)點擊密碼(觸發(fā)用戶名元素離焦事件),使用Ajax 將用戶名發(fā)送到服務(wù)器 判斷是否存在
jquery 1.4 、 1.6新特性比較多 (企業(yè)主流 1.4)
使用struts2 json插件
要點1 : <package> extends 繼承json-default
要點2 : <result> type 類型寫json
struts2 json插件 ,默認(rèn)將值棧root頂端對象 所有屬性返回(get方法)
不想將company屬性返回 ,在get方法上@JSON(serialize=false)
案例二 :服務(wù)器將商品對象 List列表返回
如果Action 實現(xiàn)ModelDriven, model對象就是值棧棧頂對象,struts2 json插件默認(rèn) 將model返回
通過設(shè)置root屬性,修改插件返回 根對象
* <param name="root">action</param> 將Action作為根對象返回
只想要每個商品的 name 屬性
方案一: 在pnum、price的get方法上 添加@JSON(serialize=false) =========只要@JSON注解,屬性將永遠(yuǎn)不能參與json返回
方案二: 設(shè)置 includeProperties屬性
<param name="includeProperties">products\[\d+\]\.name</param>總結(jié)
以上是生活随笔為你收集整理的struts2教程(10)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts2教程(9)--OGNL表达
- 下一篇: struts2教程--标签库详解