在struts2下使用jQuery的Ajax方法的一些心得

来源:互联网 发布:java 量化交易系统 编辑:程序博客网 时间:2024/06/05 19:11

       之前做过的一个大中型的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包

以上就是我的一点心得,希望对大家有所帮助。