DWR3.0 “找不到对象” 或 “未定义” 错误的解决方法

14 篇文章 0 订阅

很久以前就知道了DWR,就是一直没有涉及它,因为一直没有做这个方面的开发。

近来心血来潮,抽空学习了一下入门。

当然,首先是下载DWR,接着是建立WEB项目(例如,我的是ajaxTest),导入DWR.jar。

然后是配置XML文档:web.xml、dwr.xml,这些就看官网上的教程吧。

一下是我的一些实验内容:

========ADD=====web.xml---start ==================

    <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>
    </servlet-mapping>

=======ADD======web.xml---end ==================

 

========ADD=====dwr.xml---start ==================

        <create creator="new" javascript="infor">
            <param name="class" value="myAbouts.GetInfo" />
        </create>

========ADD=====dwr.xml---end ==================

 

还有类:

=============myAbouts.GetInfo---start ==================

package myAbouts;

public class GetInfo {

    public String getInclude(String yourName){
        System.out.println("=============calling===getInclude===========");
        String result = "<h1>getInclude:</h1>";
        return result+yourName;
    }
    public String getInclude2(String yourName){
        System.out.println("=============calling====getInclude2==========");
        String result = "<h1>getInclude2:</h1>";
        return result+yourName;
    }
}

 

=============myAbouts.GetInfo--- end ==================

 

 

好了,可以测试一下DWR的配置情况了。启动服务器,输入地址:

http://127.0.0.1:8080/ajaxTest/dwr/

会出现你在dwr.xml文件里配置好的javascript类:

================================

Classes known to DWR:

================================

点击链接进去就可以看到,刚才在myAbouts.GetInfo.java里定义的方法了。

 

  • getInclude( ); <script type="text/javascript"> </script>
  • getInclude2( ); <script type="text/javascript"> </script>
  •  

    在引号中输入内容,点击后面的按钮,可以看到预想结果出来了。

     

  • getInclude( ); <script type="text/javascript"> </script> "<h1>getInclude:</h1>大法官法"
  • getInclude2( ); <script type="text/javascript"> </script> "<h1>getInclude2:</h1>冲锋号"
  •  

     

    到这里,DWR的配置已经正常完成。如果在上面的测试步骤中不能得到你的预想结果,那就是你的配置有问题了,可以参考官方的资料自己仔细检查,也可以给我留言,一起学习。

     

     

    下面,我来讲一下,在页面中出现未定义问题时的解决方法。

    通常地,建立页面文件:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>DWR-TEST</title>
        <!-- 根据刚才在“http://127.0.0.1:8080/ajaxTest/dwr/ ”进去后看到的提示内容,添加下面的几行。-->
        <script type='text/javascript' src='dwr/interface/infor.js'></script>

        <script type='text/javascript' src='dwr/engine.js'></script>
        <script type='text/javascript' src='dwr/util.js'></script>

       
        <!-- 定义页面处理函数 -->
        <script type="text/javascript">


             function firstDwr (arg){            // 页面事件响应函数
                    //alert(arg);
                    infor.getInclude(arg,callBackHello);

             }
             function callBackHello(data){    //回调函数。如果早期接触过ajax的话,应该有所了解。
                      alert(data);
                   $("myText").value = $("myText").value + data;
             }

    </script>
       
       
        <link rel="stylesheet" type="text/css" href="index.css">
      </head>
     
      <body>
        This is my DWR-TEST page. <br>
        <input type="button" name="button" value="测试($=getElementbyId)" οnclick="firstDwr('max')"/>
        <input type="text" id="myText" value="只是测试……" size="100"/>
        <hr>
      </body>
    </html>

    =========================================

    通过以上,你可以看到DWR已经可以正常使用到页面了。

    OK,添加一个类。

    如下:

    =====dwr.xml==========

    <create creator="new" javascript="service">
                <param name="class" value="helloWorld.Service" />
            </create>

    =====dwr.xml==========

    和java类:

    =====helloWorld.Service==========

    package helloWorld;

    public class Service {
        public String sayHello(String yourName) { //可以是访问数据库的复杂代码
            return "Hello World " + yourName;
        }
    }

    =====helloWorld.Service==========

     

    然后,再将页面上的事件响应函数firstDwr 作以下改动:

    infor.getInclude(arg,callBackHello);

    修改为

    service.sayHello(arg,callBackHello);

     

    然后,在打开页面测试,发现错误了?!“未定义对象”?!

    很好,至少,你能够懂得基于例子上的创新实践。

     

    解决方法:

    登陆页面http://127.0.0.1:8080/ajaxTest/dwr/

    看到对应的JAVASCRIPT类的页面。

    发现没有,页面上提示了,你应该插入以下<script>标签:

    <script type='text/javascript' src='dwr/interface/service .js'></script>
        <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/service .js'></script>

    其中,红色的字体,就是你在该页面中将要使用的一个javascript类,该文件不会真的存在

    那好,添加这样的一行进去吧。再测试页面……成功了吧?。。恭喜你!!

     

    总结:当确认DWR配置成功后,如果页面提示有“未定义错误”时,应该检查一下,你所用到的javascript类所对应的文件,是否已经显式地包含进页面里。所有在页面使用到的JAVASCRIPT对象都应该被包含进来 。(完)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值