struts2教程(10)
struts2 標簽庫
tag-reference.html 就是 struts2標簽規范
一、 通用標簽庫 的學習
<s:property> 解析ognl表達式,設置默認值,設置內容是否HTML轉義
<s:set> 向四個數據范圍保存數據
<s:iterator> 遍歷值棧中數據
<s:if> <s:elseif> <s:else> 進行條件判斷 -------- elseif可以有多個
<s:url> 進行URL重寫(追蹤Session) ,結合s:param進行參數編碼
<s:url action="download" namespace="/" var="myurl">
<s:param name="filename" value="%{'MIME協議簡介.txt'}"></s:param>
</s:url>
<s:property value="#myurl"/>
<s:a> 對一個鏈接 進行參數編碼
<s:a action="download" namespace="/" >下載MIME協議簡介.txt
<s:param name="filename" value="%{'MIME協議簡介.txt'}"></s:param>
</s:a>
OGNL 了解部分 : 支持賦值操作和表達式串聯 、 操作集合對象
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的值
{} 直接構造List元素、 #{}直接構造 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標簽庫的學習 (Form標簽)
使用struts2 form標簽 好處 : 支持數據回顯 , 布局排班(基于Freemarker模板定義 )
1、struts2 表單標簽 value屬性。 必須寫%{} 進行設值
使用struts2表單標簽前, 必須配置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> 表單標簽
<s:form action="regist" namespace="/" method="post" theme="xhtml"> --- theme="xhtml"默認布局樣式
<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構造Map (看到值和提交值 不同時)
<s:checkboxlist list="#{'sport':'體育','read':'讀書','music':'音樂' }" name="hobby"></s:checkboxlist>
<s:radio> 生成一組radio
3、使用 ognl構造List (看到內容和提交值 相同時)
<s:radio list="{'男','女'}" name="gender"></s:radio>
<s:select> 生成一個<select>
<s:select list="{'北京','上海','南京','廣州'}" name="city"></s:select>
4、struts2 開發 密碼框 默認不回顯
<s:password name="password" id="password" showPassword="true"/>
5、 頁面元素主題設置
default.properties ---- struts.ui.theme=xhtml 設置struts2 頁面元素使用默認主題
struts.ui.templateSuffix=ftl 默認模板引擎 Freemarker
修改主題
方式一 :<s:textfield name="username" label="用戶名“theme="simple"></s:textfield> 只對當前元素有效
方式二 :<s:form action="" method="post" namespace="/ui“ theme="simple">對form中所有元素有效
方式三 : struts.xml
<constant name="struts.ui.theme" value="simple"></constant> 修改默認主題樣式,頁面所有元素都有效
優先級 :方式一 > 方式二 >方式三
三、防止表單重復提交原理
表單防止重復提交
表單重復提交 危害:刷票、 重復注冊、帶來服務器訪問壓力(拒絕服務)
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、 當表單重復提交時,token攔截器自動跳轉result name="invalid.token"
通過 <s:actionError/> 顯示錯誤信息
覆蓋重復提交信息 struts.messages.invalid.token=您已經重復提交表單,請刷新后重試
四、Struts2 內置json插件
知識點 :struts2的 Ajax開發
Ajax開發客戶端 和 服務器交互數據格式 --------------- json
json 是最輕量級,體積最小
服務器將程序處理結果,轉換為json格式發送給 客戶端
json-lib 、 flexjson 工具類庫
struts2-json-plugin-2.3.7.jar
案例一: 輸入用戶名,鼠標點擊密碼(觸發用戶名元素離焦事件),使用Ajax 將用戶名發送到服務器 判斷是否存在
jquery 1.4 、 1.6新特性比較多 (企業主流 1.4)
使用struts2 json插件
要點1 : <package> extends 繼承json-default
要點2 : <result> type 類型寫json
struts2 json插件 ,默認將值棧root頂端對象 所有屬性返回(get方法)
不想將company屬性返回 ,在get方法上@JSON(serialize=false)
案例二 :服務器將商品對象 List列表返回
如果Action 實現ModelDriven, model對象就是值棧棧頂對象,struts2 json插件默認 將model返回
通過設置root屬性,修改插件返回 根對象
* <param name="root">action</param> 將Action作為根對象返回
只想要每個商品的 name 屬性
方案一: 在pnum、price的get方法上 添加@JSON(serialize=false) =========只要@JSON注解,屬性將永遠不能參與json返回
方案二: 設置 includeProperties屬性
<param name="includeProperties">products\[\d+\]\.name</param>總結
以上是生活随笔為你收集整理的struts2教程(10)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts2教程(9)--OGNL表达
- 下一篇: struts2教程--标签库详解