2011/6/27 角色管理模块分析_页面分析
1.首页index.jsp分析
js:估计是还没有完成,不过大致内容都有
<script type="text/javascript" language="javascript"> var selRows = ""; var fromObj = thisDlg.inObj; function iniPage() { opener = null; window.history.forward(); thisDlg.endFun(); } function doRoleFun() { var fromObj = {}; fromObj.id = RoleDBGrid.doGetCellValue(0); fromObj.name = RoleDBGrid.doGetCellValue(1); p.openParentDlg("ROLE_FUNREL", "为角色【" + fromObj.name + "】配置功能权限", 400, 500, fromObj, "ROLEMENU", "RoleMenuIni", "&in_roleid=" + fromObj.id, window, true, true, "", ""); } function doRoleData() { var fromObj = {}; fromObj.id = RoleDBGrid.doGetCellValue(0); fromObj.name = RoleDBGrid.doGetCellValue(1); p.openParentDlg("ROLE_DATAREL", "为角色【" + fromObj.name + "】配置数据权限", 950, 550, fromObj, "DATAROLE", "DataRoleIni", "", window, true); } function returnCWin() { } </script>
一个是初始化进来的页面,一个是用于打开给角色配置功能权限的窗体,另一个是用于打开给角色配置数据权限的窗体,最后一个是对子窗体返回的值进行处理
相关内容解释:
字符串selRows 暂时没有用,var fromObj = thisDlg.inObj; 是指fromObj是当前窗口的来源窗口,也就是说从当前的窗体获得数据传给另一个要打开的窗体,
在初始化进来的页面中 opener = null; window.history.forward(); 是用于防止操作者使用 Backspace 键返回,而 thisDlg.endFun(); 实际上就是为了表明新的
窗体打开了
doRoleFun和doRoleData是在后台初始化页面时配置给列表中的每个列中某项被点击了触发的JS方法,var fromObj = {}; 是指新建一个对象,fromObj.id = RoleDBGrid.doGetCellValue(0); fromObj.name = RoleDBGrid.doGetCellValue(1); 是给这个对象添加一些属性(键值对),这个主要就是用于传参的。p.openParentDlg就是在父窗体中打开一个新的子窗体,这个方法(index.js中定义的)会创建一个新的dlg对象,并调用doCommit(bsID, fun, paras);方法,完成对打开的窗口的初始化,这其中还会调用相应的JavaBean的相应方法,例如这里:"ROLEMENU", "RoleMenuIni" ;
var newDlg = parentDlg.openDlg(parentDlg.name + "_" + id, title, 0, 0, width, height, isMT, isResize, retFun, img, index, exStr1, exStr2, exStr3, true); if (newDlg != null) { newDlg.inObj = inObj; newDlg.win = cWinName; newDlg.startFun(); if (retFun != null && retFun != "") { newDlg.retFun = retFun; } newDlg.returnObj = null; frmBusiness.target = newDlg.target; doCommit(bsID, fun, paras); }
(注意红色的部分:很重要的内容)
同时还有一个传参 "&in_roleid=" + fromObj.id ,这个很重要的,有了这个参数后台的安格方法就可以根据这个值去查数据库,openParentDlg 方法的最后一个参数是回调函数,可以不写,默认是returnCWin方法,该方法主要就是用来处理如何处理从子窗体返回的值,例如:
doRefresh方法调用
if (val.doValidate() && confirm("是否提交数据?")) { doRefresh("MENU", "commitMenu", true, "", "&in_type=" + fObj.type, "MenuCommitRet"); }其中的回调函数:
function MenuCommitRet(retObj, data) { if (data == "T") { thisDlg.returnObj = data; thisDlg.closeDlg(); } else { alert(data); } }
方法的第一个参数retObj是返回的对象,后者是返回值,方法体的意思就是如果返回值data是 “T”,那么返回对象就是data,然后关闭子窗体thisDlg.closeDlg(); 反之,如果不是”T“,那么就弹出data
关于 returnCWin (定义在 index.js 中)
function returnCWin(thisDlg) { cWin = null; if (thisDlg != null && thisDlg.win != null) { if (this.name == thisDlg.win.name) { cWin = this; } else { cWin = thisDlg.win; } cWin.document.body.focus(); var returnFun = thisDlg.retFun; if (returnFun == null || returnFun == "") { if (thisDlg.returnValue != null) { thisDlg.returnObj = thisDlg.returnValue; } cWin.returnCWin(thisDlg.returnObj, thisDlg.inObj); } else { eval("cWin." + parentDlg.tempDlg.retFun + "(thisDlg.returnObj,thisDlg.inObj)"); } } parentDlg.reshow(); cWin = null; }
这个js方法不懂,貌似大致内容就是关闭子窗体,重新显示父窗体
jsp:就是一个datagrid控件,因为角色之间没有多对多的关系,只需要用表格就可以显示
<form method="POST" name="frmBusiness" action=""> <table style=" 100%;" id="" align="left" border="0" cellpadding="0" cellspacing="0"> <tr valign="top"> <td style=" 100%;" colspan="2"> <BS:datagrid name="RoleDBGrid" style="100%;" rowNumOnePage="10" showString="角色列表" /> </td> </tr> </table> </form>
form是不可以省的,用于提交表单,datagrid中rowNumOnePage表示一页显示的条数,showString是指在表格的左上角现实的字符串,如下图所示: