您的位置:首页 > 其它

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

2009-12-08 10:50 330 查看
很久以前就知道了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:

infor
(myAbouts.GetInfo)

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

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

getInclude(
);

getInclude2(
);

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

getInclude(
);

"<h1>getInclude:</h1>大法官法"

getInclude2(
);

"<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)" onclick="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对象都应该被包含进来
。(完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐