DWR的使用
2.2如何在javascript中调用DWR配置好的java类方法...3
如何利用DWR框架直接调用java方法
1.DWR的作用:
DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆javascript代码。他是基于ajax的,可以实现无刷新效果。
2. DWR框架直接调用java类方法的配置
2.1 dwr.xml的配置
在我们所建工程的WebRoot/WEB-INF目录下面找到dwr.xml文件
dwr.xml的文件内容大体框架如下:
<dwr>
<allow>
<create creator=”new” javascript=”testClass”>
<param name=”class” value=”com.dwr.TestClass”>
<include method=”testMethod”>
</create>
</allow>
</dwr>
框架说明:
(1)<allow>标签中包括可以暴露给javascript访问的东西。
(2)<create>标签中指定javascript中可以访问的类,并定义DWR应当如何获要进行远程的类的实例。Creator=”new”的属性用来指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获取实例。
(3)javascript=” testClass”属性指定javascript代码访问对象时使用的类名称。
(4)<param>标签指定要公开给javascript的java类名
(应包含路径如:<paramname="classvalue="com.taiji.waf.sys.controller.WafUserController"/>)
(5)<include>标签指定要公开给javascript的方法。不指定就公开所有方法。
<exclude>标签指定要防止被访问的方法
配置好这个之后
2.2如何在javascript中调用DWR配置好的java类方法
首先将下面三段代码引入javascript脚本中
(1)<script type='text/javascript' src='/你的工程名/dwr/interface/类名.js'></script>
(2)<script type='text/javascript' src='/你的工程名/dwr/engine.js'></script>
(3) <script type='text/javascript' src='/你的工程名/dwr/util.js'></script>
例如:
|
示例 ![]() |
在引入上面三条代码之后,我们就可以在javascript中直接调用java类方法了
具体调用写法:
<!—callback是我们所调用函数的返回值—>
function callback(){
}
<!—现在我们在function Test()中调用java类的某个方法)—>
function Test(){
。。。。。
类名.方法(参数1,参数2……callback)//其中一定要有callback参数
}
如下例:
function callback(uiu){ if(uiu!=1){alert("您的考核权重配置为:"+uiu+",请验证您的考核权重比例");} } functionPsearch(){
if(document.getElementById("A_id").value=="")alert("请输入被考核人"); else{ java类 RatingsConfigAction.Getd(document.getElementById("A_id").value,document.getElementById("ast").value,callback); } |
function callback(uiu){ if(uiu!=1){alert("您的考核权重配置为:"+uiu+",请验证您的考核权重比例");} } functionPsearch(){
if(document.getElementById("A_id").value=="")alert("请输入被考核人"); else{ java类 类方法 RatingsConfigAction.Getd(document.getElementById("A_id").value,document.getElementById("ast").value,callback); } |
详情请参考:http://wenku.baidu.com/view/4d7cdac10c22590102029d7a.html
http://jinguo.iteye.com/blog/210834
更新:如何直接获取DWR返回值
一般在页面中要取DWR方法的值的做法
function test(){
dwrTest.hello(function(data){alert(data)})
}
当你的javascript的test方法要返回这个值时就不好办了。因为DWR方法返回值是执行完后通过调用指定的函数将值返回。这们的话,我们往往会这么做
function test(){
var result;
dwrTest.hello(function(data){result=data})
return result;
}
上面的代码在使用的时候会发现它的返回值为"undefined",分析一下
dwrTest.hello(function(data){result=data})
这一句中“function(data){result=data}"这个方法是一个传给dwrTest.hello的一个参数,是由hello方法执行完后再调用的,所以在test()中并不会执行,就直接返回了一个未初始化的"result"。
实际上这就是一个异步处理过程,而javaScript默认是同步执行的。
我们只要把上面的代码改成:
Code
function test(){
var result;
//设置成同步方式
DWREngine.setAsync(false);
dwrTest.hello(function(data){result=data})
//设置成异步方式
DWREngine.setAsync(true);
return result;
}
这样JavaScript执行的时候就会等待"dwrTest.hello"执行完毕后再执行接下来的语句,这时我们就可以直接取得返回值了