DWR以及SSH集成DWR
2014-03-09 22:33
134 查看
之前只是单独接触了DWR,知道一个基本的开发流程。
web.xml配置文件:
dwr.xml配置如下:
然后在JSP中:
这样子,DWR就能够单独的使用了,首先我以为在SSH中DWR也是这样配置就行了,就能够发挥作用,没想到并不是这样。
首先是web.xml跟单独使用DWR时是一样的。
然后是dwr.xml,这里将会有所改变,因为此时的dwr对象不再是自己new,而是交给了spring进行管理的,具体如下:
在网上找资料时,<param name="beanName" value="userAction"></param> ,有的是将此处的value设置成strust中path值,我试了,但是没有成功。如果哪个前辈知道的话,可以给我说说,感激不尽。
其他地方都没有什么要特别注意的,但是strust.xml配置文件中必须得加上下面这句话。
<constant name="struts.action.excludePattern" value="/dwr.*"></constant>
为什么呢?!原因很明显,strust的过滤器与dwr中的过滤器产生了冲突。
web.xml中
strust的过滤器:
可以得出,strust过滤器中的url-pattern是*,而dwr则是/dwr/*,明显可以看出strust将拦截所有的路径,当然也就包括了原本给dwr的路径。
想到这里当然也就能够想到解决办法,那就是将本应该给dwr的路径,strust不再拦截,就好了,那是要怎样做呢?!确实上文早就给出了答案。
<constant name="struts.action.excludePattern" value="/dwr.*"></constant>
但是这句话是什么意思呢?!excludePattern表示这个将是strust不处理的路径,也就让/dwr.* 这个路径交个了DWR框架。
至此问题已经解决,从此以后,SSH与DWR集成不再成问题。
另外还将这个DWR动态生成下拉列表,并且选中特定项的JSP关键代码贴出来:
web.xml配置文件:
<!-- 配置Dwr信息 --> <servlet> <servlet-name>DwrServlet</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <!-- 是否允许调试,如果要在浏览器中调式则必须设置为true --> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <!-- 是否进行日志管理,如果是要在这设置参数,通常省略 --> <init-param> <param-name>logLevel</param-name> <param-value>WARN</param-value> </init-param> <!-- 是否允许跨域请求,如果是则必须设置为false,默认为true --> <init-param> <param-name>crossDemainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DwrServlet</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <!-- 配置Dwr信息 end-->
dwr.xml配置如下:
<dwr> <allow> <create creator="new" javascript="ExceptionDemo"> <param name="class" value="com.bluefox.dwr.exception.ExceptionDemo"/> </create> <create creator="new" javascript="CountryService"> <param name="class" value="com.bluefox.dwr.service.impl.CountryServiceImpl"/> </create> <convert match="com.bluefox.dwr.domain.Country" converter="bean"/> </allow> </dwr>
然后在JSP中:
<!DOCTYPE HTML><%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>dwr_6</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type='text/javascript' src='/dwr_1/dwr/engine.js'></script> <script type='text/javascript' src='/dwr_1/dwr/util.js'></script> <script type='text/javascript' src='/dwr_1/dwr/interface/CountryService.js'></script> <script type="text/javascript"> window.onload = function() { CountryService.findAllCountrys(function(data) { //alert(data); dwr.util.addOptions("country",data,"id","name"); }); }; </script> </head> <body> <select id="country" size="1"> <option value="">请选中国家</option> </select> </body> </html>
这样子,DWR就能够单独的使用了,首先我以为在SSH中DWR也是这样配置就行了,就能够发挥作用,没想到并不是这样。
首先是web.xml跟单独使用DWR时是一样的。
然后是dwr.xml,这里将会有所改变,因为此时的dwr对象不再是自己new,而是交给了spring进行管理的,具体如下:
<dwr> <allow> <!-- create中javascript为要生成的js文件名称和前台调用方法的主方法:--> <!-- create因为使用ssh框架,由spring代理,所以设置成spring,同时也是可以自己new的,scope表示存活周期--> <create creator="spring" javascript="userAction" scope="application"> <!-- param中的name因为要调用bean中的方法,所以 使用beanName,当然还有其他配置方法(如class) ,--> <!-- value我这里是用的spring配置文件applicationContext.xml中的action的id --> <param name="beanName" value="userAction"></param> <!--include是说明这个action中只有findAllTeachers这个方法可以被前台所访问 , --> <!-- 不过我这样配置了,但是没有效果,dwr debug调试时,userAction中的方法全部都能访问 --> <include method="findAllTeachers"/> </create> <!-- convert说明将match路径下的action换成bean,供beanName使用 --> <convert match="com.ymj.stuInfoColl.domain.User" converter="bean"/> </allow> </dwr>
在网上找资料时,<param name="beanName" value="userAction"></param> ,有的是将此处的value设置成strust中path值,我试了,但是没有成功。如果哪个前辈知道的话,可以给我说说,感激不尽。
其他地方都没有什么要特别注意的,但是strust.xml配置文件中必须得加上下面这句话。
<constant name="struts.action.excludePattern" value="/dwr.*"></constant>
为什么呢?!原因很明显,strust的过滤器与dwr中的过滤器产生了冲突。
web.xml中
strust的过滤器:
<filter> <filter-name>Struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>Struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>dwr的过滤器:
<!-- 配置Dwr信息 --> <servlet> <servlet-name>DwrServlet</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <!-- 是否允许调试,如果要在浏览器中调式则必须设置为true --> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DwrServlet</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <!-- 配置Dwr信息 end-->
可以得出,strust过滤器中的url-pattern是*,而dwr则是/dwr/*,明显可以看出strust将拦截所有的路径,当然也就包括了原本给dwr的路径。
想到这里当然也就能够想到解决办法,那就是将本应该给dwr的路径,strust不再拦截,就好了,那是要怎样做呢?!确实上文早就给出了答案。
<constant name="struts.action.excludePattern" value="/dwr.*"></constant>
但是这句话是什么意思呢?!excludePattern表示这个将是strust不处理的路径,也就让/dwr.* 这个路径交个了DWR框架。
至此问题已经解决,从此以后,SSH与DWR集成不再成问题。
另外还将这个DWR动态生成下拉列表,并且选中特定项的JSP关键代码贴出来:
<script type='text/javascript' src='/StudentInfoCollectionSys/dwr/engine.js'></script> <script type='text/javascript' src='/StudentInfoCollectionSys/dwr/interface/userAction.js'></script> <script type='text/javascript' src='/StudentInfoCollectionSys/dwr/util.js'></script> <script type="text/javascript"> $(function(){ var teacherId = $("input[name='teacherIdValue']").val(); userAction.findAllTeachers(function(data) { dwr.util.addOptions("teacherId",data,"id","name"); dwr.util.setValue("teacherId",teacherId); }); }); </script>而在jsp的body里面则只需要:
<select id="teacherId" name="teacher"></select>参考资料:http://blog.163.com/sean_zwx/blog/static/169032755201112563854677/
相关文章推荐
- AJAX showHint()函数
- 今天学习编写DTD文件
- MapReduce编程模型--接口体系结构--架构设计--《hadoop技术内幕》读书笔记
- 协同过滤介绍和简单推荐系统的实现
- 驱动程序编写入门以及驱动程序加载
- android cocos2dx游戏-添加截屏并分享微博功能
- BusyBox tftp 的使用
- 【转】Socket状态变迁图
- 软件单元测试与代码规范
- 11g r2 rac 修改ip
- 算法导论的思维导图,采用xmind制作。
- 我的百度地图开发第一期
- <%%> 还有<%# %> 还有<= >这种标签都有什么作用
- 观点:软件专利都是扯淡!
- 第十四天3月8日之多表设计和JDBC、静态工厂设计模式
- 六款Win7系统可用的免费内存释放工具,让电脑跑的更high
- 南邮2014网络赛题解
- C#中读写JSON风格的配置信息
- android String 类型转换成UTF-8格式
- 关于图片2进制的处理