struts+ajax
??
標準的struts是同步交互的,客戶端提交請求到Action,服務端處理后findforward()刷新整個頁面,ajax是異步交互,頁面通過
xmlHttpRequest提交一個后臺線程到服務端,服務端處理后將xml或者html寫回客戶端,客戶端回調函數隨即刷新內存中的dom樹.
?
?? 由于ajax不用刷新整個頁面,且每次回調函數直接更新內存,所以速度非???且客戶體驗很豐富,比如用ajax可以很容易實現菜單聯動(因為它只更新下 級菜單,上一級菜單根本不會受影響,在jsp中意味著不用關心頁面刷新時其它表單元素的選擇值),另外還有一點ajax是客戶端的技術,對struts的 架構不會影響(客戶端的提交可以用ajax提交到servlet,也可以沿用struts方式提交到Action中),因此很容易想到將ajax和 Struts結合起來,共用兩者的優勢.
?
?? 由于ajax不用刷新整個頁面,且每次回調函數直接更新內存,所以速度非???且客戶體驗很豐富,比如用ajax可以很容易實現菜單聯動(因為它只更新下 級菜單,上一級菜單根本不會受影響,在jsp中意味著不用關心頁面刷新時其它表單元素的選擇值),另外還有一點ajax是客戶端的技術,對struts的 架構不會影響(客戶端的提交可以用ajax提交到servlet,也可以沿用struts方式提交到Action中),因此很容易想到將ajax和 Struts結合起來,共用兩者的優勢.
?? 用ajax+struts的架構有一些需要注意的問題,這是我在項目中的一些感受,在這里寫出來,供各位同仁參考:
??
1:設計頁面跳轉的操作不要用ajax.ajax主要是用于異步交互,所以它是同一個頁面的操作,在xmlHttpRequest.open()方法中,
"get"方法明確表示是從服務端獲取,"post"方法雖然表示提交,但主要用于瀏覽器url隱藏參數的具體值,在ajax的servlet中用
response.sendRedirect()方法是無效的,原頁面會傻等后臺servlet的相應.因此MIS系統中的新增,修改等需要到另一個頁面
的操作都應該用傳統的form.submit()的方式提交頁面.
???
2:在ajax傳參時要特別注意\",\'這些字符,尤其是一個參數中含多個字段的情況,盡量不要用'$','%'等特殊字符來分割.在servlet端
getParameter()的時候會出問題,比如你的參數是param1="dkfjdslf"+form1.text1.value;而你的
text1中的字符串含有\"字符,那\"后面的
就都傳不過去了.我們項目中遇到過這種情況,找了很久才發現參數只傳了一部分.建議如果參數不全的情況首先檢查其中是否有特殊字符.
就都傳不過去了.我們項目中遇到過這種情況,找了很久才發現參數只傳了一部分.建議如果參數不全的情況首先檢查其中是否有特殊字符.
???
3:struts和ajax合用時有時會出現struts刷新整個頁面結果把ajax效果覆蓋了的情況,比如我們的翻頁組件是會提交整個表單到原頁面,這
時如果客戶做了ajax的其它操作,翻頁返回時這些效果就都沒有了.我的建議是在頁面中用<input
type=hidden>元素保留ajax的主要效果,每次ajax回調函數返回時更新該元素,這樣即時重新提交了該頁面也可以通過
request.getParameter()取到ajax效果元素的值.在我們項目中是把每次的查詢sql語句做為hidden元素保存了的,因此每次
翻頁后下級表格或者其它表單元素仍可以通過該sql取得.
??
4:ajax大部分是js腳本,js腳本的調試比較麻煩,主要的辦法就是alert()和iE左下腳的錯誤提示,一般來說大部分的腳本錯誤都在語法上,比
如select1.options[1]寫成了select1.option[1]什么的,看資料上有IE有Dom
Inspector可以查看內存中的dom樹結構(在google上搜Internet Explorer developer
toolbar),用這些第三方的工具可以幫我們調試ajax
??
5:有時候strust在request中setAttribute的東西會跟ajax傳的parameter沖突(比如上頭提到的sql,在新增操作完
后返回查詢頁面時,struts會在request.setAttribute("sql",sql),
而原查詢頁面的下級菜單查詢等ajax操作會傳以"sql="+sql的方式傳參,這樣兩個sql會沖突,我的建議是
request.getParameter("sql")==null?request.getAttribute("sql"):request.getParameter
("sql"),首先保證本頁面的異步操作,再考慮其它頁面的跳轉操作.
?? 好了,暫且寫這些吧,其中有些可能各位高人看起來是廢話,那請毫不留情的斧正!在此祝各位同仁中秋國慶愉快,祝和我一樣國慶加班的同事們身體健康,萬事如意.
posted on 2007-08-13 10:24 藍色幽默 閱讀(1563) 評論(0) 編輯 收藏 所屬分類: Struts