大家好:
我有一个项目采用在dwr与spring整合的时候出现了问题,自己试了两天也没有结果,由于我的项目是使用spring的注解方式管理的bean和struts的action。网上资料也不全,还望各位牛人们能帮帮忙!在jsp页面上由一个方法要调用一个类BookManagerImpl中的addBook()方法
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
@Transactional
public class BookManagerImpl implements BookManager {
       public void addBook() {
           add//...........方法
        }
}
--------------------------------------------------------
web.xm中有光dwr的配置
  <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
  </servlet>  <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
当然还有些dwr.xml的配置,网上的整合方法也试了还是没法运行,在这儿还望牛人解答

解决方案 »

  1.   

    报错了,他说没有相应的dwr类注册,应该就是配置不合理了
      

  2.   

    dwr在spring中注入需要做的事情:
    1 引入dwr的jar包,2。0和3.0是不一样的。
    2 在web.xml中加入<servlet>
        <servlet-name>dwr-invoker </servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet </servlet-class>
        <init-param>
          <param-name>debug </param-name>
          <param-value>true </param-value>
        </init-param>
    </servlet> 3在web-inf下建立dwr.xml进行相关的配置
    4 建立你的类,如果是接口和实现类的话,你要调用的方法必须在接口中定义下。
    5 在你的applicationContext.xml中配置下你的类
    6 在页面中要加入对dwr的引用
    <script type='text/javascript' src='dwr/interface/aclManager.js'></script>
    <script type='text/javascript' src='dwr/engine.js'></script>
    <script type='text/javascript' src='dwr/util.js'></script>
      

  3.   

    页面上javascript直接调用 BookManagerImpl.addBook() 方法??这肯定是不可以的, 因为BookManagerImpl是需要Spring的IOC容器来获取才有注明@Transactional的特性...建议另起一层, js调用ScriptService.addBookService() (这个class配置到dwr的配置中), 
    然后addBookService用IOC方式获取BookManagerImpl的实例, 再addBook()试试
      

  4.   

    关于方面的我写过一篇blog楼主可以参考一下:
    http://www.blogjava.net/relax/archive/2009/08/13/290958.html
      

  5.   

    谢谢你的回复,我也在applicationContext.xml中配置下了相应的类
    <bean id="aclManager" class="com.xxxx.manager.impl.BookManagerImpl">
    </bean>
    这样的配置tomcat能够正常启动,dwr的debug页面http://localhost:8080/dwr/也能够正常显示BookManagerImpl类中的相应方法,问题就是一但我正式调用的时候,就不能正常的调用方法
      

  6.   

    你的回复和提示都很棒,但是按照在dwr.xml中配置了interface间接调用方法,才发现原来dwr是不支持这样的方式的,dwr不能通过interface来调用真正的方法操作类
      

  7.   

    zk_2000的文章写得很好给了我很多的启发,我按照文章上的方法重新配置了一下我的项目,我想是版本或其他地方的问题吧结果还是不能运行,我想先确认一下我是使用dwr version: 2.0.1,不知zk_2000是哪个版本。
      

  8.   

    -------jsp-------
    <script src='../dwr/interface/ProblemService.js' type=""></script>
    <script src='../dwr/engine.js' type=""></script>
    <script src='../dwr/util.js' type=""></script>-------dwr.xml----------
    <create javascript="ProblemService" creator="spring">
    <param name="beanName" value="problemService" />
    </create>
    ----------spring注入-------------
    <bean id="problemService"
    class="ProblemServiceImpl">
    </bean>
      

  9.   

    页面直接可以用ProblemService.方法(params,function(return){
    })最后一个参数是回调函数,就是你执行了以后你要做什么,函数参数就是你所调
    方法返回值,回调函数可以不用写
      

  10.   

    配置实现了事务的service.要调用业务层实例就调用这个
      <bean id="baseService" ...../>在web.xml文件中配置dwr
     <servlet>
      <servlet-name>dwr-invoker</servlet-name>
      <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
      <init-param>
       <param-name>debug</param-name>
       <param-value>ture</param-value>
      </init-param>
     </servlet>
     <servlet-mapping>
      <servlet-name>dwr-invoker</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
     </servlet-mapping>配置dwr.xml
     <dwr>
      <allow>
       <create javascript="baseService" creator="spring">
        <param name="beanName" value="baseService"/>
      </allow>
     </dwr>在页面中调用
     <script type="text/javascript" src="dwr/engine.js"></script>
     <script type="text/javascript" src="dwr/util.js"></script>
     <script type="text/javascript" src="dwr/interface/baseService.js"></script>
     <script type="text/javascript" src="js/utils.js"></script>
     <input type="button" value="登录" onclick="isExist()"/>js/utils.js
     function isExist() {
      var username = document.getElementById("username").value;
      var password = document.getElementById("password").value;
      baseService.findByUserPwd(username,password,callback);
     } function callback(value) {
      if (value=="failure") {
       document.getElementById("show").innerHTML = ".....";
      } else {
       document.forms[0].submit();
      }
     }
      

  11.   

    我所有的配置都是按照10楼的朋友所配置的
    可是报了Error creating bean with name '/fee': Autowiring of fields failed;
    后面还有很多异常,都说的是我引用注解方法注入失败
    是这么原因啊