关闭

AjaxAnyWhere的原理

标签: jspajax框架servletajaxincludefilter
1233人阅读 评论(0) 收藏 举报
分类:

AjaxAnywhere利用JSP标签把Web页面标注出可以动态装载的区域, 可以直接把任何JSP页面转化为AJAX感知组件而不需要进行复杂的Javascript编码.
    <script> ajaxAnywhere.getZonesToLoad = function(url){ return "countriesList"; } </script>
    <select size="10" name="language" onchange="ajaxAnywhere.submitAJAX();">
        <%@ include file="/locales_options_lang.jsp"%>
    </select>

    <aa:zone name="countriesList">

        <select size="10" name="country" >
            <%@ include file="/locales_options_countries.jsp"%>
        </select>

    </aa:zone>
   
   AjaxAnywhere的这种做法与witrix平台中的ajax方案有些类似, 例如
   
    <select onchange="new js.Ajax().setObjectEvent('changeLanguage').setParam(this).setTplPart('countriesList').replaceChildren('countriesList')"> ...</select>

    <div id="countriesList">
   <tpl:define id="countriesList">
       ....
   </tpl:define>
    </div>

    但是在AjaxAnywhere的方案中, 后台jsp页面总是要完整运行的, 它通过servlet filter机制缓存所有的jsp输出, 而aa:zone标签则把自己的bodyContent运行后的结果保存在request的attribute中, 最后servlet filter根据调用参数决定返回那些zone的运行结果. 而在witrix平台中的方案中, 只有指定的tplPart才会被运行, 其他部分完全被忽略. 这种差异的根源在于Jsp Tag技术本身的局限性. Jsp Tag的设计是非常原始的, 基本上就是在字符串层面上进行操作, 在运行的时候缺乏对页面结构强有力的控制. 实际上, 在我看来, 所有基于jsp tag的技术都受制于jsp tag的先天的局限性, 很难有深度的发展, 包括JSF技术.

上面是我在网上看到的,(witrix平台我不知道)这点在自己使用AjaxAnyWhere也确实是这样的。其实Ajax只是把它标明aa:zone 那一部分提取出来。然后把页面中的相应部分换掉。而且我还发现一个问题,如果在aa:zone 之间的是<tr></tr>部分时,它并不能换掉页面的内容。

我在使用AjaxAnyWhere时也曾想过自己写一个js文件来对一些请求验证之类的进行处理。后来想最好还是加入另一种ajax框架好点。不过目前还没有加入,如果大家有感觉好的可以提示一下。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7068次
    • 积分:113
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档