日期:2014-05-16  浏览次数:20577 次

ajaxanywhere总结
ajaxanywhere 总结:
1,简介
AjaxAnywhere被设计成能够把任何一套现存的JSP组件转换成AJAX感知组件而不需要复杂的JavaScript编码.它利用标签把Web页面简单地划分成几个区域,然后使用AjaxAnywhere来刷新那些需要被更新地区域

下面把我这两天的所学做一下总结:
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.xml的头部进行修改,原来是这样写的
<web-app>..... ,必须要修改成
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
这样才行。
否则你会发现一个特别奇怪的错误,例如<c:forEach items="sdfsd" var="item">${item.value}</c:forEach>
就是不循环