dwr+struts2+hibernate实现二级动态联动

本文介绍了一种使用DWR简化AJAX代码实现二级联动的方法。通过配置DWR及前端JS,实现在用户选择学院后动态加载对应系别。文章详细展示了从环境搭建到前后端代码的具体实现。

关于二级联动的功能,以前用asp写过,早忘了……这次的任务是做二级动态联动,所以整理了一下,记录一下,也供大家参考下,有什么问题尽管指出。

实现的功能是这样的:数据库有两个表,一个是college,一个是department,其中,department里面有一个外键是college的主键,两个表之间的联系是一对多的。在页面中,第一个下拉菜单的内容是从college里面读取的数据,当选择了第一个下拉菜单后,第二个显示的是通过ajax读取的表department的内容。下面就开始具体的步骤吧!

首先第一步,要下载dwr.jar包,放到工程lib下。

第二步,在web.xml中配置dwr,加入如下的配置代码:

Code:
  1. <!--定义dwr拦截器-->
  2. <servlet>
  3. <servlet-name>dwr</servlet-name>
  4. <servlet-class>
  5. org.directwebremoting.servlet.DwrServlet
  6. </servlet-class>
  7. <init-param>
  8. <param-name>debug</param-name>
  9. <param-value>true</param-value>
  10. </init-param>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>dwr</servlet-name>
  14. <url-pattern>/dwr/*</url-pattern>
  15. </servlet-mapping>

第三步:在web.xml同目录下新建dwr.xml,这里可以进行配置。结合我的例子解释一下:

Code:
  1. <dwr>
  2. <allow>
  3. <!--javascript属性对应客户端调用的js,new表示用new创造器-->
  4. <createjavascript="myjs"creator="new">
  5. <!--name=“class”表示对应的是java类,value属性是对应的后台功能类-->
  6. <paramname="class"value="com.usersope.struts.college.FindDepart"/>
  7. <!--method是说后台类里面的那个方法可以调用-->
  8. <includemethod="getdepart"/>
  9. </create>
  10. <!--如果后台类返回的是list类型,那就要加上这句-->
  11. <convertmatch="com.usersope.hibernate.DAO.Department"converter="bean"></convert>
  12. </allow>
  13. </dwr>

为了测试你的dwr是否已经正确配置好,在浏览器中测试一下,路径是:http://localhost:8080/项目名称/dwr/index.html。注意,这里一定要用html结尾,不知道为什么,小叶也不告诉我……,如果出现下面的页面,则说明成功了!

第四步:前台js的写法。

其实前台主要的就是回调函数。

Code:
  1. <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
  2. <%@taglibprefix="s"uri="/struts-tags"%>
  3. <%
  4. Stringpath=request.getContextPath();
  5. StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7. <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
  8. <html>
  9. <head>
  10. <basehref="<%=basePath%>">
  11. <title>welcomeloginin</title>
  12. <metahttp-equiv="pragma"content="no-cache">
  13. <metahttp-equiv="cache-control"content="no-cache">
  14. <metahttp-equiv="expires"content="0">
  15. <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
  16. <metahttp-equiv="description"content="Thisismypage">
  17. <!--
  18. <linkrel="stylesheet"type="text/css"href="styles.css">
  19. -->
  20. <!--导入dwrjs文件-->
  21. <scripttype='text/javascript'src='/usersope/dwr/interface/myjs.js'></script>
  22. <!--下面两个是dwr本身自带生成的-->
  23. <scripttype='text/javascript'src='/usersope/dwr/engine.js'></script>
  24. <scripttype='text/javascript'src='/usersope/dwr/util.js'></script>
  25. <scripttype="text/javascript">
  26. //获取函数
  27. functiongetdepart(){
  28. varcolid=document.getElementById("colid").value;
  29. myjs.getdepart(colid,getdeparts_back);
  30. }
  31. //获取回调函数,名字取决于上面那行
  32. //参数data是接受的action的返回值 ,这个是list类型的。然后将list加载到下拉列表框中
  33. functiongetdeparts_back(data)
  34. {
  35. vars=document.getElementById("depart");
  36. for(vari=0;i<data.length;i++)
  37. {
  38. varopt=newOption(data[i].dename,data[i].value);
  39. s.options[i]=opt;
  40. }
  41. }
  42. </script>
  43. </head>
  44. <bodybgcolor="#eeeeee">
  45. <center>注册</center>
  46. <s:formaction="RegistAction.action"name="form1"method="post"validate="true">
  47. <tablealign="center"width="60%"border="1">
  48. <tr>
  49. <td><s:textfieldid="username"name="users.username"label="UserName"/>
  50. <spanid="message"></span>
  51. </td>
  52. </tr>
  53. <tr>
  54. <td><s:passwordid="password"name="users.password"label="Password"/>
  55. <spanid="messages"></span>
  56. </td>
  57. </tr>
  58. <tr>
  59. <td>
  60. <div>
  61. <!--listKey是传值内容,id让js获取的,list是列表,listValue是显示选项的内容-->
  62. <s:selectid="colid"label="college"list="list"listKey="colid"
  63. listValue="colname"headerKey="0"headerValue="-请选择学院-"
  64. multiple="false"onchange="getdepart()"name="users.college"/>
  65. <s:selectid="depart"label="department"list="#{}"listKey="dename"
  66. headerKey="0"headerValue="-请选择系别-"
  67. name="users.depart"
  68. multiple="false"/>
  69. </div>
  70. </td>
  71. </tr>
  72. <tr>
  73. <td><inputtype="submit"value="Regist"/></td>
  74. <td><inputtype="reset"value="Reset"/></td>
  75. </tr>
  76. </table>
  77. </s:form>
  78. <divstyle="padding:0,0,0,700px;">
  79. <formaction="index.action"name="form2"method="post">
  80. <inputtype="submit"value="GoIndex"/>
  81. </form>
  82. </div>
  83. </body>
  84. </html>

最后,把后台类也放上吧:

Code:
  1. publicclassFindDepart{
  2. Listdepartlist;
  3. publicListgetDepartlist(){
  4. returndepartlist;
  5. }
  6. publicvoidsetDepartlist(Listdepartlist){
  7. this.departlist=departlist;
  8. }
  9. UsersDAOExdao=newUsersDAOEx();
  10. publicListgetdepart(intcolid){
  11. //自己定义的一个可以传递不定参数的方法,这里就直接调用啦~
  12. departlist=dao.findList("fromDepartmentDwhereD.colid=?",colid);
  13. returndepartlist;
  14. }
  15. }

整个过程应该就是这样的。利用dwr简化了很多ajax的代码,只要你搞清楚了,其中的来龙去脉还是比较好理解的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值