AJAXAnywhere 总结
ajaxanywhere 总结:
1,简介
AjaxAnywhere被设计成能够把任何一套现存的JSP组件转换成AJAX感知组件而不需要复杂的JavaScript编码.它利用标签把Web页面简单地划分成几个区域,然后使用AjaxAnywhere来刷新那些需要被更新地区域
2,ajaxanywhere学习有两天了。ajaxanywhere与jsp,servlet,struts都能配合使用得很好。但是也有一些问题。
这几天找了一些ajax的开源,感觉ajaxtags功能有限且实现复杂,很难和其他框架集成。strutstags
倒很对路但是提供的例子里竟然没有strutsconfig.xml运行不起来,没办法,我只好转向ajaxanywhere,用了一天的时间才把ajaxanywhere与 servlet,struts框架分别结成起来,处理主要集中在aa.js,不是不用写js,而是只要写少量的js就可以实现复杂的调用。感觉很简单。
但是它也有不足之处,Demo中deServerSide.jsp例子点14下后竟然死掉了,sourceforge论坛上
294条记录竟然没有一个人发现,我和其他几个同事使用他们提供的网上Demo也是一样,提了这个
问题一时半会也没有人解答。看来,这也是js牛人才能真正玩的通的,为什么这么说呢?因为一旦出
了问题就要研究aa.js了。说是不用自己写js,但实际上还是要把aa.js研究透了才敢用到项目中。
下面把我这两天的所学做一下总结:
2.1 从配置上来讲:
ajaxanywhere没有tld文件,但是他需要在web.xml中配置一个filter,这就足够了。
<filter>
<filter-name>AjaxAnywhere</filter-name>
<filter-class>org.ajaxanywhere.AAFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AjaxAnywhere</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AjaxAnywhere</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AjaxAnywhere</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
值得注意的是,只有通过此filter的request url才能够使用它的功能,所以要确保需要此功能的url能够通过此filter!我刚开始的时候写了一个servlet与ajaxanywhere的 jsp页面联合使用,但总是抱错:“说返回的类型并不是text/xml”类型,后来
我想肯定是要求servlet必须返回text/xml类型了,于是就在servlet的末尾增加了一句话:
response.setContentType("text/xml; charset=UTF-8");心想这回没错了吧,没想到运行时仍旧显示“返回类型不是
text/xml”,这是页面的js报的错误,也就是在返回信息到了页面,叶面分析返回数据的时候报的错误。仔细检查了servlet
设置返回类型的那句话并没有错误。
原来问题出在servlet的mapping上面,设置了一个/xxxx没有带".do"(这时还没有struts环境呢),这样一来,servelt返回给页面的response并没有被AjAxanywhere Filter截获,当然就没有没有被处理过(具体内部处理不太清楚),于是就出了上面的错误。
解决方法很简单,把所有需要ajaxanywhere的servlet mapping配置成一个比较特殊的后缀,例如localServlet.aj这样在
web.xml中配置AjaxAnywhere过滤器的filer-mapping 增加一条
<filter-mapping>
<filter-name>AjaxAnywhere</filter-name>
<url-pattern>*.aj</url-pattern>
</filter-mapping>
这样所有的后缀为aj的servlet就都可以使用上此Filter了。错误就没有了。ok,上面讲了ajaxanywhere + servlet 的方法。
2.2 配置ajaxanywhere + struts .
配置也比较简单。在struts的配置正确的基础上,只需要配置 ajaxanywhere的filter,增加一个mapping,如果struts ActionServlet配置了mapping *.xx ,那么表示所与后缀为xx的url都经过AcitonServlet来处理,好,ajaxanywhere要求所有的
url在进入AciontServlet之前首先进入他的Filter,离开ActionServlet之后也要首先进入他的Filter,而不是直接返回页面。
这样,只要在ajaxanywhere filter的mapping后面增加
<filter-mapping>
<filter-name>AjaxAnywhere</filter-name>
<url-pattern>*.xx</url-pattern>
</filter-mapping>
即可。这样就能和struts配置使用了。
2.3 配置ajaxanywhere + jsf
例子中也讲到了与jsf配合使用的方法,jsf我没有用过,但是配置 ajaxanywhere要做得就是增加一个filter-mapping而已。假设jsf的后缀是*.jsf,那么只需要在 ajaxanywhere filter中增加一个此后缀的mapping,就ok了。
2.4 ajaxanywhere + * + jstl
于jstl连用实际上就是与jsp连用,但是把jstl也融合进来需要注意,ajaxanywhere Demo例子中的web.xml
不兼容jstl,所以除了要把必要的jar文件tld文件拷贝到项目之外,还要把web.x