在應用dwr架構時經常會出現被呼叫的自己定義的類未定義,如:Hello是自己定義的物件
package com.dingxun.dwr;
public class Hello {
public String hello(String name) {
return "你好"+name+",歡迎你的加入";
}
}
這個物件是用來在客戶呼叫的,如下面代碼:
if (typeof window["DWRUtil"] == "undefined") {
window.DWRUtil = dwr.util;
}
function hello() {
var name=$('name').value;
Hello.hello(name, callback);
}
function callback(msg) {
DWRUtil.setValue("state", msg);
}
在上面的代碼中,Hello.hello(name, callback)就是在用戶端呼叫的物件,它呼叫我們定自義的物件Hello中的hello方法。但是在某些情況下我們呼叫的時間會出現Hello未定義的錯誤,有以下幾種情況會出現這種錯誤:
1:在dwr.xml中配置錯誤
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr//dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="Hello">
<param name="class" value="com.dingxun.dwr.Hello" />
</create>
<convert match="demo.Person" converter="bean"></convert>
</allow>
</dwr>
解決辦法: 這種情況就是class配置錯誤,隻需把class配置正确就可以了。還要注的一點就是javascript對應的名字Hello才是我真正用的呼叫物件的名字,隻有通 過 javascript對應的Hello才能呼叫我們自定義的物件。
2:在jsp頁面引用錯誤
通常預設的引用如下:
<script type='text/javascript' src="/dwr/interface/Hello.js"> </script>
<script type='text/javascript' src="/dwr/engine.js"></script>
<script type='text/javascript' src="/dwr/util.js"></script>
這種引用方法在某些情況下很容易出錯,用以下方法就可以解決引用錯誤這個問題。
解決辦法如下:
方法1:
<script type="text/javascript"
src="<%=request.getContextPath()%>/dwr/interface/Hello.js'">
</script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/dwr/engine.js">
</script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/dwr/util.js">
</script>
方法2:
<script type='text/javascript' src="/項目名/dwr/interface/Hello.js"> </script>
<script type='text/javascript' src="/項目名/dwr/engine.js"></script>
<script type='text/javascript' src="/項目名/dwr/util.js"></script>
方法3:
此方法待寫
如果仔細分析,以上幾種方法其實質都是一樣的,因為request.getContextPath()得到的就是:/項目名。
總結:
通過上面的介紹,基本上就可以搞定呼叫物件未定義的問題,至于還沒有其它情況有待發現。