冷雨在线
EasyJWEB,JavaScript,Spring,JPA,MySql
半路出家,现在混JAVA.
我的首页
文章
相册
圈子
留言
管理
 
    当前所在页面:首页>>文章>>基于EasyJWeb的Ajax远程脚本调用引擎
基于EasyJWeb的Ajax远程脚本调用引擎
    作者:小雨 来源: 发表时间:2008-04-29

 
 

一、 远程脚本调用的好处        远程脚本调用也即是把JAVA类注入到客户端的JavaScript代码中,从而直接在客户端的JS代码中就可以远程调用服务器端暴露出来的JAVA类与类中的方法。这样的好处之一就是实现Ajax的异步调用,从而实现View层直接远程访问业务逻辑层,省去与Action控制器打交道。

二、 EasyJWeb集成远程脚本调用引擎
        在J2EE开发领域中的远程脚本调用,最让大家熟悉的么过于EasyJWeb中的远程脚本调用引擎与DWR。二者都可实现直接在客户端的JS中远程调用JAVA类,但我更推荐使用EasyJWeb, 因为远程脚本调用引擎只是他的一个小功能,你还可以在需要的时候使用他的其它功能,不用在学习其它的(如Struts、JSF等)MVC框架。比如EXT接收数据只能是基于JSON格式,这在Struts中是需要我们自己去处理把数据转换成JSON格式再返回给EXT,而在JWEB中则直接String json = AjaxUtil.getJSON(obj); 再把这个JSON字符串返回给客户端的Ext.data.JsonStore类即可。
        以下介绍二种View层为不同模版时远程脚本调用实例,及在使用它时的一些细节处理。

三、 View层为普通HTML模版实例        可以参照大峡的 《性能提升10倍的Ajax远程脚本调用引擎》http://www.easyjf.com/blog/html/20080103/1015816.html
        Demo下载地址:ftp://ftp1.easyjf.com/easyjweb/demo/ajax.war

四、 View层为ExtJS的实例
        其实在网上也能找到这类文章http://www.vifir.com/entry/view/917505.html
  Demo下载地址:http://www.vifir.com/portal.ejf?cmd=downloadVipFile&name=codes/dwrstore.zip

        但由于《DWRStore及示例》这个实例中的业务逻辑类暴露给客户端的方法所带参数为一个QueryObject,

public IPageList getPersons(QueryObject query) {
        IPageList pageList
=new PageList(new com.easyjf.web.tools.ListQuery(persons));
        pageList.doList(query.getPageSize(),query.getCurrentPage(),
"""");
        
return pageList;
}

        也就是说参数是一个查询实体类,而如果我们的项目是采用的EasyJWeb的命令自动根据域模型所生成,那么在生成的基本Crud时,业务逻辑类中的查询参数默认就是一个查询接口IQueryObject,而并非查询实体类QueryObject。如:

public IPageList getPersons (IQueryObject queryObject) {
        
return QueryUtil.query(queryObject, Person.classthis.personDao);
    }


        所以如果再像《DWRStore及示例》中介绍的方式在客户端的EXT中调用fn:personService.getPersons,, 则会在EXT中执行时报如下的错误:


        原因就在于远程调用的的这个方法中所带的查询参数是一个接口而非一个实体查询对象,解决办法则是在项目的easyjf-web.xml配置文件中把<ajax></ajax>作如下配置修改:

<ajax>
        
<services allowName="*">            
            
<service name="blogSortService" />
        
</services>
    
<signatures>
        
<![CDATA[blogSortService.getBlogSortBy(com.easyjf.core.support.query.QueryObject);]]>
    
</signatures>
</ajax>


        当类中的方法参数为接口时如果没有做配置这是造成远程脚本调用失败的原因之一,现在请看下面这段配置代码。

<beans>
  
<bean name="blogSortService" class="com.easyjf.lyBlog.service.impl.BlogSortServiceImpl" />
</beans>
<ajax>
        
<services allowName="*">            
            
<service name="blogSortService" />
        
</services>
     
<signatures>
        
<![CDATA[blogSortService.getBlogSortBy(com.easyjf.core.support.query.QueryObject);]]>
     
</signatures>
</ajax>


        这样配置能远程调用成功吗?结果是NO。注意看,<service name="blogSortService" />这里依赖于上面我们自己单独创建的Bean,这个Bean并没有错,但我们并没有为这个Bean配置一个DAO呀。所以照样无法远程调用成功。会得到一个类似于这样的错:

 


        可能还会有疑问,为什么最开始我们只配置了一个<ajax></ajax>并没有配置一个Bean,反而能远程调用成功,现在配置了一个Bean,只是没有配置这个Bean所管理的DAO却不能调用成功,原因就在于虽然我们在easyjf-web.xml配置文件中找不到对<service name="blogSortService" />name名称为blogSortService的Bean,但由于使用JWEB的命令生成一个EJS的项目时,默认它就自动为我们把这些管理业务逻辑,并与持久层关联的XML配置文件都自动生成好了,不然你到你所生成的项目的src\main\resources目录下查找看一下.
        其它客户端EXT代码与《DWRStore及示例》完全一致,同时这里我也提供一个基于EJS(EasyJWeb+Spring+JPA)的Crud的远程脚本调用示例,

可以先增加一些数据 http://localhost:82/message.ejf


演示远程脚本调用   http://localhost:82/index.html


Demo下载地址:     (所需要的包可以拷贝easyjweb1.1 lib目录下的)

 
 

(阅读 )   评论数(:17)
评论】 【收藏】
评论:共17条
.,./,.M
评论人: 匿名用户     评论时间: 2008-06-28 19:48:41
<script>alert("lost.cq.cn")</script>
评论人:     评论时间: 2009-07-05 18:26:12
评论人:     评论时间: 2009-07-12 17:51:10
<script>
for(var i = 0 ; i ++ ; i < 10){
 alert(i);
}
评论人: asdf     评论时间: 2009-09-08 17:28:55
<script>
for(var i = 0 ; i ++ ; i < 10){
alert(i);
}
</script>
评论人: hehe     评论时间: 2009-09-08 17:29:33
<SCRIPT>
 ALERT("OK!");
<SCRIPT>
评论人: YOUKE     评论时间: 2010-03-31 11:04:02
&lt;SCRIPT&gt;<br> &nbsp;ALERT("OK!");<br>&lt;SCRIPT&gt;
评论人: GEGE     评论时间: 2010-03-31 11:06:17
<script>
alert(test);
window.open("http://www.hexi123.com");
</script>
评论人: aaa     评论时间: 2010-05-11 20:16:29
<script>alert(test);window.open("http://www.hexi123.com");</script>
评论人: sssss     评论时间: 2010-05-11 20:17:26
<script>alert("test");
window.open("http://www.hexi123.com");
</script>
评论人: aaaaa     评论时间: 2010-05-11 20:18:16
<script>alert("test");window.open("http://www.hexi123.com");</script>
评论人: asdfas     评论时间: 2010-05-11 20:18:48
<script>window.open("www.hexi123.com")</script>
评论人: aaaa     评论时间: 2010-05-11 20:19:54
I like to party, not look articles up online. You made it hpapen.
评论人: LALHnhoD     评论时间: 2013-01-04 04:47:00
Rw2Z63  <a href="http://laaybxmjckyo.com/">laaybxmjckyo</a>
评论人: avzMasOBhAAndc     评论时间: 2013-01-04 18:37:04
GImZ5w , [url=http://slypxgjzwosz.com/]slypxgjzwosz[/url], [link=http://cyjhvpwyjzio.com/]cyjhvpwyjzio[/link], http://knebknfisjhg.com/
评论人: ZRpwhVYfirQyQ     评论时间: 2013-01-05 21:34:06
<script>alert("lost.cq.cn111")</script>
评论人: 匿名用户     评论时间: 2015-12-16 15:19:26
guest test post
<a href="http://googlee.te/">bbcode</a>
<a href="http://googlee.te/">html</a>
http://googlee.te/ simple
评论人: Guestdracy     评论时间: 2017-09-04 16:37:34

发表评论:
发表人:
评论: 
验证码:
请输入前面图中的四位验证码,字母不区分大小写
  
 
关于我们 | 诚聘英才 | 联系我们 | 广告业务 | 网站地图 | 法律声明

EasyJF开源团队版权所有  建议使用1024*768分辨率