之前做過的一個大中型的web項目,框架都是架構師搭建起來的——標準的s2sh框架。架構師對立面的好多東西做了封裝,我們一些“新手”只是在框架的基礎的“累代碼”,項目做得挺順利的。也算是按期交付吧。
現在做另一個項目,用到了jQuery的Ajax技術,用於唯一性驗證。但是Ajax老是不執行回調函數,最終花了兩週才搞定,都是由於之前沒有搞懂框架。下面是我解決問題的一些心得。
1.Ajax函數不執行,肯定是Ajax的方法沒有寫對,諸如url、datatype;
2.Ajax的回調函數不執行(調試中進了Action層),後臺報這個錯誤:Servlet.service() for servlet jsp threw exceptionjava.lang.ClassNotFoundException: com.opensymphony.xwork2.util.TextUtils ,首先是看看xwork-2.X.jar包下com.opensymphony.xwork2.util中沒有TextUtils.class文件,立刻更換xwork-2.X.jar,讓裏面含有TextUtils.class文件;
3.如果是自己搭框架,jar有衝突,尤其是struts2、spring、xwork三個的jar,立刻換,讓三者兼容;(建議採用低版本的jar包)
4.在Ajax對應的Action層中,不要使用HttpRequest的get、set方法,最好的做法是將httpServletRequest、httpServletResponse的get、set方法寫到一個父類中,然後Ajax對應的Action類去繼承這個父類,可以避免這個錯誤的發生:java.lang.IllegalStateException: getInputStream() has already been called for this request 這一條是我自己試出來的結果,至於原因我也說不上。
5.struts2文件中配置Ajax需要繼承json-default,一般寫法<package name="包名" namespace="/命名空間,可以爲空" extends="json-default">,並且在配置返回值是直接寫<result type="json"/>即可
6.在對應的Action中的所調用的對應的service的get、set方法上面需要加上@JSON(serialize = false);這一點很重要
7.引入javassist.jar包:Javassist 字節碼解釋器,不然回報Dispatcher initialization failed……錯誤
下圖是我的部分jar包
以上就是我的一點心得,希望對大家有所幫助。