今天內容密度相當大,而且還有點細,知識點比較多。今天是馮老師的最后一天課程,與老馮的將近一個月的接觸,老馮講課有特點:幽默,上課時時不時幽一下,很提神的;聲音比較大,以至于老馮有句極像口頭禪的“小點聲,不然隔壁又找來了”;最重要的是上課的代碼每天都有超強的注釋,比較有特點的是超強的 readme.txt ,深的同學喜愛;講課特別敬業,這兒的老師都是特別敬業的。聽說老馮嘔心瀝血,自己做了個項目,年后會公布在網上,到時真的研究研究,相當期待。老師最后給我們了個郵箱,以后有問題,仍然可詢問下。
把今天講的內容總結下,今天講了昨天留的作業(Struts做的客戶信息系統),Struts1.x的驗證機制,表單重復提交,同步令牌機制,上傳的實現,轉換器,國際化內容,由于內容多,只記不會的
1.處理表單重復提交
解決方法:
1. 生成一個唯一的編號,該編號在添加信息的頁面存放在隱藏域中
該代碼執行后自動添加在customer.jsp頁面中添加如下信息 session中保存一份
代碼如下:注意:在execute方法中{
//在Action的execute方法開始加上
this.saveToken(request);
…
//在調用service層增刪改查前加從request中獲取隱藏域的值
// Stirng gxxxValue=request.getParameter("org.apache.struts.taglib.html.TOKEN");
// 在從session中取出 String keyValue=session.getAttribute("key");
// 如果兩個值相等 gxxxValue=keyValue,數據提交
boolean flag=this.isTokenValid(request);
if(flag){
//應該從session中清除session.removeAttribute(key)
this.resetToken(request);
/ /插入數據庫的方法以下面一句為例
customerService.saveCustomer(c);
}else{
System.out.println("表單重復提交了");
}
注意:原理:
* 從request中獲取隱藏域的值
Stirng gxxxValue=request.getParameter("org.apache.struts.taglib.html.TOKEN");
* 在從session中取出 String keyValue=session.getAttribute("key");
* 如果兩個值相等 gxxxValue=keyValue,數據提交
當數據提交后要從sessioon中刪除key sessioon.removeAttribute("key")
2.轉換器:
當我們在開發時,會遇到數據庫中的數據類型和ActionForm中的類型不一致的情況,為減少轉換的麻煩,Struts給我們了轉換器,她能自動轉化很多類型,但遇到如果遇到Date類型就不能轉換
這時要定義轉換器
如何定義一個轉化器:
1.定義一個類 String2DateConvert implements Converter
重寫接口中的方法
2.注冊轉化器(一定在使用前注冊) 在struts中常用的轉換器Struts自己給注冊了
實際是把信息放置到一個Map中,原理:
* key是轉化數據類型的名稱
* 轉化器的對象
converters.put(clazz, converter);
converters.put(java.util.Date, new String2Dateconverter());
下面是代碼:在Action類中(注意不是在方法體中),加:
static{
/**
* register(new String2DateConvert(), java.util.Date.class);
* 第一個參數是轉化器的實例
* 第二個參數要轉化的數據類型(本類中用的String-java.util.Date)
*/
ConvertUtils.register(new String2DateConvert(), java.util.Date.class);
}
剩下的就是用Struts自己的,代碼:
BeanUtils.copyProperties(與數據庫交道的form, 與頁面交道的form);
最后
建議:開發中ActionForm中的所有屬性定義為String, 不管什么樣的數值我都接收,接收到之后在進行檢驗
3.國際化:
struts中的國際化:
* 定義資源文件
命名規則基名_語言_國家.properties
定義支持中文和英文的資源包
* resource.properties(默認)
* resource_zh_CN.properties
* resource_en_US.properties
把資源包放置到當前web應用的src下,經構建后保存到/WEB-INF/classes目留下
中文要進行編碼轉化
native2ascii -encoding gb2312源文件目標文件.properites
* 在struts中如何使用
* 在struts-config.xml文件中引入 parameter="resource"的值基名
<message-resources parameter="resource"></message-resources>
* 在jsp頁面中如何使用
引入bean標簽庫
<%@ taglib uri=http://struts.apache.org/tags-bean prefix="bean"%>
<bean:message key="username"/> key 是資源文件中=前面的值
* 如有多個資源文件
* 在struts-config.xml文件中引入 parameter="resource"的值基名
增加屬性key 加以區分
<message-resources
parameter="resource1" key="backup"></message-resources>
*在jsp頁面中如何使用
<bean:message key="username" bundle="backup"/>
今天就至此了,明天是佟剛老師講AJAX ,每天都有收獲,是我最開心的事情,
好好休息,靜待明天的來到!