引言:DWR是一个框架,简单的说就是能够在javascript 直接调用java方法,而不必去写一大堆javascript代码,
他是基于Ajax实现的,可以实现无刷新效果
1.dwr 配置之web.xml
<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <!-- 这个参数默认的是false,如果是true我们可以通过http://localhost:8080/shxx/dwr/interface/XjzxbjFacade.js 看到你部署的每个dwr class,并且可以测试java代码的每个方法是否运行正常,正式环境下一定要把这个参数设置为false --> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>classes</param-name> <param-value>java.lang.Object</param-value> </init-param> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>maxWaitAfterWrite</param-name> <param-value>-1</param-value> </init-param> <init-param> <param-name>disconnectedTime</param-name> <param-value>60000</param-value> </init-param> <init-param> <param-name>config-1</param-name> <param-value>/WEB-INF/classes/dwr/dwr_core.xml</param-value> </init-param> <init-param> <param-name>config-2</param-name> <param-value>/WEB-INF/classes/dwr/dwr_xt.xml</param-value> </init-param> <init-param> <param-name>config-3</param-name> <param-value>/WEB-INF/classes/dwr/dwr_wf.xml</param-value> </init-param> <init-param> <param-name>config-4</param-name> <param-value>/WEB-INF/classes/dwr/dwr_zb.xml</param-value> </init-param> <init-param> <param-name>config-5</param-name> <param-value>/WEB-INF/classes/dwr/dwr_xm.xml</param-value> </init-param> <init-param> <param-name>config-6</param-name> <param-value>/WEB-INF/classes/dwr/dwr_cw.xml</param-value> </init-param> <init-param> <param-name>config-7</param-name> <param-value>/WEB-INF/classes/dwr/dwr_dzjj.xml</param-value> </init-param> <init-param> <param-name>config-8</param-name> <param-value>/WEB-INF/classes/dwr/dwr_xj.xml</param-value> </init-param> <init-param> <param-name>config-9</param-name> <param-value>/WEB-INF/classes/dwr/dwr_jc.xml</param-value> </init-param> <load-on-startup>100</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
注意:1.一个servlet,对应多个dwr.xml配置文件 ,这种情况下 param-name的值必须以config开头,param-name的个数可以>=0个,如果等于0
呢么将会读取WEB_INF/dwr.xml,如果大于0个,则这个文件不会被读取。
2.dwr.xml的配置。
<dwr> <allow> <convert match="java.lang.StringBuffer" converter="bean"/> <!-- 收费标准页面 根据当前项目的 流程环节 判断显示那些收费项目 by黄敏 2013-06-09--> <create javascript="SfbzFacadeImpl" creator="spring"> <param name="beanName" value="cw.sfbzFacade"/> <include method="getXM_HJMC"/> <include method="getSfsfbyallfb"/> </create> </allow> </dwr>注意:<convert> 负责这些方法的参数和返回值。coverter 指定是按照javabaean的方式方式匹配。
<allow>中包括可以暴露给javascript访问的东西。
<create> 标签中指定javascript中可以访问的java类,并定义dwr如何获得要进行的远程类的实例 。
creator =“new” 指定java类实习的生成方式,new 意味着dwr应当调用类的默认构造函数来获得实例,
其他还有spring,通过IOC容器获得实例。javascript代码指定访问对象时使用的名称。
<param> 标签 指定要公开给javascript的java类名。
<include> 标签指定要公开给javascript的方法。不指定的话就公开所有方法。
3.javascript 中的调用。
<script jwcid="@Any" type="text/javascript" src="ognl:request.contextPath + '/dwr/engine.js'"></script> <script jwcid="@Any" type="text/javascript" src="ognl:request.contextPath+'/dwr/interface/XjzxbjFacade.js'" />也可以加上util.js.,XjzxbjFacade.js 是dwr根据配置文件自动生成的。
js中的具体应用。
XjzxbjFacade.saveForXJ_TBSJ(tbsjid,sjz,xjxid,zbjlid,document.getElementById("xmxh").value,document.getElementById("bxh").value,document.getElementById("bmgysxh").value,function(map){ //回写小计 if(map.XIAOJI!=null){ document.getElementById('xj'+map.XIAOJITBSJID).value= map.XIAOJI; document.getElementById(map.XIAOJITBSJID).value= map.XIAOJI; document.getElementById('zj'+map.ZONGJITBSJID).value= map.ZONGJI; document.getElementById(map.ZONGJITBSJID).value= map.ZONGJI; } });前面的是要传入的参数,后面的function(map)是接受这个方法返回的值。