今日用到了DWR让我折腾了一会,最终搞定,先记住,方便下次不用麻烦!
1,添加Dwr.jar
2,配置web.xml(请自行添加ContextLoaderListener监听器,否则bean无法获取!),
1.<servlet>
2. <servlet-name>dwr-invoker</servlet-name>
3. <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
4. <init-param>
5. <param-name>debug</param-name>
6. <param-value>true</param-value>
7. </init-param>
8. <init-param>
9. <param-name>crossDomainSessionSecurity</param-name>
10. <param-value>false</param-value>
11. </init-param>
12. </servlet>
13. <servlet-mapping>
14. <servlet-name>dwr-invoker</servlet-name>
15. <url-pattern>/dwr/*</url-pattern>
16. </servlet-mapping>
3,配置dwr.xml(将此文件添加到WEB-INFO目录下,此配置方法很多,详参考相关文档)
1.<?xml version="1.0" encoding="UTF-8"?>
2.<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
3.<dwr>
4. <allow>
5. <create creator="spring" javascript="aclManager" scope="application">
6. <param name="beanName" value="aclManager"/>
7. </create>
8.
9. <convert converter="bean" match="com.panlong.service.impl.AclManagerImpl" />
10. </allow>
11.</dwr>
4,要使用时请先在调用页面引入文件如下:
1.<script type="text/javascript" src="<%=request.getContextPath() %>/dwr/engine.js"></script>
2.<script type="text/javascript" src="<%=request.getContextPath() %>/dwr/util.js"></script>
3.<script type="text/javascript" src="<%=request.getContextPath() %>/dwr/interface/aclManager.js"></script>
5,使用例子。
1.<script type="text/javascript">
2.//授权
3.function addOrUpdatePermission(field){
4. dwr.engine.setAsync(false);
5.
6. //如果被选择上,则同时选择其"不继承"和"启用"checkbox
7. if(field.checked){
8. $(field.moduleId+"_USE").checked = true;
9. <c:if test="${aclInfo.principalType eq 'User' }">
10. $(field.moduleId+"_EXT").checked = true;
11. addOrUpdateExtends(field);
12. </c:if>
13. }
14.
15. aclManager.addOrUpdatePermission(
16. "${aclInfo.principalType}",
17. ${aclInfo.principalId},
18. field.moduleId,
19. field.permission,
20. field.checked
21. );
22.}
23.
24.//设置用户的继承特性
25.function addOrUpdateExtends(field){
26. aclManager.addOrUpdateUserExtends(
27. ${aclInfo.principalId},
28. field.moduleId,
29. !field.checked
30. );
31.}
32.
33.//点击启用checkbox
34.function usePermission(field){
35. //如果checkbox被选中,意味着需要更新ACL的状态
36. //更新C/R/U/D以及Extends状态
37.
38. //设置为同步方式,以便DWR依次发出下列请求
39. dwr.engine.setAsync(false);
40.
41. if(field.checked){
42. addOrUpdatePermission($(field.moduleId+"_C"));
43. addOrUpdatePermission($(field.moduleId+"_R"));
44. addOrUpdatePermission($(field.moduleId+"_U"));
45. addOrUpdatePermission($(field.moduleId+"_D"));
46. <c:if test="${aclInfo.principalType eq 'User' }">
47. addOrUpdateExtends($(field.moduleId+"_EXT"));
48. </c:if>
49. }else{
50. aclManager.delPermission(
51. "${aclInfo.principalType}",
52. ${aclInfo.principalId},
53. field.moduleId
54. );
55. $(field.moduleId+"_C").checked = false;
56. $(field.moduleId+"_R").checked = false;
57. $(field.moduleId+"_U").checked = false;
58. $(field.moduleId+"_D").checked = false;
59. <c:if test="${aclInfo.principalType eq 'User' }">
60. $(field.moduleId+"_EXT").checked = false;
61. </c:if>
62. }
63.}
64.
65.function initTable(){
66. aclManager.searchAclRecord(
67. "${aclInfo.principalType}",
68. ${aclInfo.principalId},
69. function(datas){
70. for(var i=0; i < datas.length; i++){
71. var moduleId = datas[i][0];
72. var cState = datas[i][1];
73. var rState = datas[i][2];
74. var uState = datas[i][3];
75. var dState = datas[i][4];
76. var extState = datas[i][5];
77.
78. $(moduleId+"_C").checked = cState == 0 ? false : true;
79. $(moduleId+"_R").checked = rState == 0 ? false : true;
80. $(moduleId+"_U").checked = uState == 0 ? false : true;
81. $(moduleId+"_D").checked = dState == 0 ? false : true;
82. <c:if test="${aclInfo.principalType eq 'User' }">
83. $(moduleId+"_EXT").checked = extState == 0 ? true : false;
84. </c:if>
85. $(moduleId+"_USE").checked = true;
86. }
87. }
88. );
89.}
90.
91.</script>
结束!
java技术社区QQ群:48596106欢迎你的加入!