dwr整合spring

在整合DWR与Spring时遇到'allowScriptTagRemoting is false.'异常和'java.lang.IllegalArgumentException'。问题源于图书中过时的整合方式。通过查阅DWR官网文档,发现应使用<aop:scoped-proxy/>来处理DWR调用AOP代理对象的情况。调试和查阅官方文档是解决此类问题的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dwr整合spring时,出现以下异常。

throw 'allowScriptTagRemoting is false.';
//#DWR-INSERT
//#DWR-REPLY

dwr.engine.remote.handleException("2","0",{javaClassName:"java.lang.Throwable",message:"Error"});

java.lang.IllegalArgumentException: object is not an instance of declaring class

google了一下,找到了相关做法。


dwr整合spring,我用的是dwr3rc1和spring2.5,当初整合时是查看了相关的图书《基于J2EE的Ajax宝典》和《DWR实战》。
图书介绍的整合方式是在dwr.xml 文件中加入
<allow>
  ...
  <create creator="spring" javascript="Fred">
    <param name="beanName" value="Shiela"/>
  </create>
  ...
</allow>

运行后,发行firebug响应出现
throw 'allowScriptTagRemoting is false.';
//#DWR-INSERT
//#DWR-REPLY
dwr.engine.remote.handleException("2","0",{javaClassName:"java.lang.Throwable",message:"Error"});

后台报出
java.lang.IllegalArgumentException: object is not an instance of declaring class

重新查看DWR官网的文档,发现DWR整合spring已经有很大改动。重新按照官网的整合方式整合。
图书中介绍的整合方式已经过时,如果按照图书中的整合方式整合可能出现上述异常。

并且在对于如果dwr调用了使用了AOP的spring bean,应该加上<aop:scoped-proxy/>
例如
<bean id="B"      class="com.bjinfotech.spring.practice.service.NoteServiceImpl">
     <aop:scoped-proxy/> <!-- This is needed or DWR gets confused. -->
     <dwr:remote javascript="noteRemoteService">
       <dwr:include method="addNote" />
 </dwr:remote>
 <property name="noteDao" ref="noteDao" />
</bean>


dwr调用了使用了AOP的spring bean B,实际上是调用了spring bean B的代理类而不是B本身,
所以报出java.lang.IllegalArgumentException: object is not an instance of declaring class。加上
<aop:scoped-proxy/> ,根据官网手册2.0.5版3.4的解释,类似的
当DWR调用了一个使用B对象的方法时,实际调用的是代理对象的方法。
随后代理对象会从容器中获取真正的B对象,并将方法调用委派给获取到
的实际的B对象。这样DWR就得到了B对象,而不是B对象的代理,就不会报出
java.lang.IllegalArgumentException: object is not an instance of declaring class
(对象不是声明类的实例异常)。


经验教训:
1.使用新框架时,最好查看官网的最新文档,图书比较容易过时。
图书上的做法如果过时之后,容易出错。

2.使用框架时,要调试成debug模式,这次使用DWR时 ,没有一开始调成debug模式,
结果控制台不报如何异常,非常难找是哪里出错了。

 

 

搜索相关做法来源:

1.http://www.javaeye.com/topic/409548

 

2.http://forum.springsource.org/showthread.php?t=57584

3.DWR官网的文档

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值