EXTJS与java后台交互DWR使用

时间:2023-01-19 00:20:46
最近公司的项目,前台界面用EXTJS,后台用Java写,他们之间的交互我目前接触到的有两种,简单介绍.
先介绍第一种方法:在EXTJS里直接调用Java方法.
在EXTJS里想用Java方法的需求很广泛,例如在界面想从后台取值做个判断,做个验证之类,或者要取到表格数据等.都是可以直接跟后台Java代码打交道.而我们又知道,js是脚本语言,只能在客户端执行,与Java代码是不互通的,所以这里使用了DWR,是个AJAX的框架.(关于DWR不多说,网上内容很多,有兴趣的可以自己研究).主要说使用方法.
首先需要引入dwr.jar包
然后需要配置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>
<servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
然后要新建dwr.xml文件,配置想要在js里用的Java类名和路径,本例使用的DWR版本为3.0R2.
示例:
<?xml version="1.0"encoding="UTF-8"?>  
<!DOCTYPE dwr PUBLIC "-//GetAheadLimited//DTD Direct Web Remoting 3.0//EN"
"http://getahead.org/dwr/dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="TestAction" scope="application">
<param name="class"value="com.wh.TestAction"/>
</create>
</allow>
</dwr>
其中JavaScript=”类名”  ,param  name=”类所在路径”
DWR的核心原理就是根据配置的类路径动态生成基于JAVA类的JavaScript代码,看似在js里用的Java方法其实还是js代码.
在js里调用这个”Java方法”的写法上跟调用Java代码也是有区别的.
示例:(基于上面的DWR配置):
Java类:
package com.wh;  
public class TestAction {
/**
* 简单的传入字符串参数,返回字符串的方法
* @param testString
* @return
*/
public String myTest(String testString){
return testString+"wh";
}
}
EXTJS界面:
//在js文件头引用DWR配置  
<script type="text/javascript" src=“项目路径 + /dwr/interface/TestAction.js”></script>;
…中间省略…

//定义一个文本框
this.testInfo = new Ext.form.TextArea( {
height: 200,
autoHeight: false,
region: 'south',
grow: false
});
//调用Java方法,使用简单回调,非JSON格式的回调
TestAction.myTest ("myTest",function(data){
//将返回值显示在文本框里
this.testInfo.setValue(data);
});
在这个调用的方法里,参数和返回值都是写在我们常用的Java方法的参数的位置,而且返回值是个函数的形式,单从这个返回值的形式也可以大概看出来使用DWR的方法调用Java方法是个回调的过程,这也是AJAX的思想,DWR这个AJAX框架也主要使用回调方式.
调用的Java方法执行完之后会回调返回值的匿名函数,函数的参数就是真正调用的方法的返回值,然后在这个函数的方法体里我们可以对参数,也就是我们需要的返回值进行相应的处理.