員工的錄入和查詢(帶 條件查詢)
今天做的是員工信息錄入和服務器端的驗證,目標是使用jQuery更熟悉,掌握分頁設計,更好理解Hibernate的一些以前未用過的類中的一些方法。
一. 員工的錄入,并進行驗證
1.顯示員工的錄入頁面
1.用jQuery 的validator 為表單做前臺驗證
2.對登錄名的Ajax 校驗
3.使用jQuery 的blockUI 插件提示Ajax 操作
4.錄入員工信息
2.服務器端的簡單驗證
1.使用struts的validator框架
2.以email為例,email非空,且符合email格式
3.員工錄入服務器端的復雜驗證
1.數據庫,EmployeeAction中,得到登錄名
2.對登錄名的可用性進行驗證,驗證登錄名在數據庫中是否存在
3.這時可以采用struts的聲明式異常
4.使用py4j 解決把漢字轉為對應的拼音: 佟剛--> tg, 張孝祥--> zxx, 黎活明--> lhm
二.員工的查詢
1.顯示員工信息:AJAX分頁
使用displaytag 分頁顯示員工信息,記 錄不超過百萬條。簡單,使用。比如OA。
1.在tomcat的webapps目錄下展示其實例。
2. OpenSessionInView:
1使用OpenSessionInView
若Hibernate中某一個類的引用屬性(也 包括集合屬性)采取懶加載策略,則可能出現懶加載異常,但沒有對其懶加載屬性進行初始化,此時關閉Session,然后再來獲取屬性,就會異常
聲明使用spring的聲明式事務:
<aop:config>
<aop:pointcut expression="execution(* cn.itcast.ems.service.*.*(..))" id="emsTxPointcut"/>
<aop:advisor advice-ref="emsTxAdvice" pointcut-ref="emsTxPointcut"/>
</aop:config>
OpenSessionInView可以解決這個問題,因為OpenSessionInView的使用流程是:
request à open session 并開始transaction –>controller à view(jsp)à
2.如何使用:
在web.xml配置:
3.缺點:
如果流程中的某一步被阻塞, 而這期間的 connection 卻一直被占用不被釋放. 例如輸出頁面時, 一方面可能是頁面內容大, response.write的時間長; 另一方面可能是網速慢, 服務器與用戶間傳輸時間久. 當大量這樣的情況出現時,就有連接池連接不足, 造成頁面假死現 象. 所以在內容多流量大的網站需慎用.
3.翻頁相關的類:
1.Page: 與具體 ORM 實現無關的分頁參數及查詢結果封裝
2. PropertyFilter: 與具體 ORM 實現無關的屬性過濾條件封裝類, 主要記錄頁面中簡單的搜索過濾條件
3. HibernateDao: 擴展 SimpleHibernateDao, 功能包括分頁查詢, 按屬性過濾條件列表:
1.不帶任何查詢條件時, 需要使用的方法:
--countCriteriaResult
--setPageParameter
--findPage(Page<T> page, Criterion...criterions)
HibernateWebUtils
分頁:
不帶查詢的分頁
employee-list-1.do --> Action --> Service --> DAO
2.查詢條件的翻頁:使用jQuery 的一個thickbox 插件完成查詢頁面的彈出
1.jQuery的分頁插件
2.在獲取第一頁的內容以后,如何 把查詢條件帶到第二頁
--把封裝了查詢條件的List放到session域中,下一次從session中取。
--把查詢條件放在隱藏域中
3.攜帶查詢條件
使用jQuery提供的serialize()方法攜帶查詢條件(行不通)
var url = this.href + “&” + $(“:hidden”).serialize();
window.location.href=url;
注意:上述方法在第一次不能起作用: 即不能再第一次把隱藏域中的參數帶過去, 因為在第一次點擊該鏈接時, href 的屬性值已經固定了, 不能再發生變化,
而第二次點擊時, 因為第一次已經改變了該屬性的值, 所以好用
所以必須在第一次點擊該鏈接之前讓 this.href = this.href + "&" + $(":hidden").serialize(); 起作用
解決方案:
$("#criteria").attr("href", $("#criteria").attr("href") + "&" + $(":hidden").serialize());
今天就到這兒,明天continue!