miracle专题手册补充_第1页
miracle专题手册补充_第2页
miracle专题手册补充_第3页
miracle专题手册补充_第4页
miracle专题手册补充_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Grid组件这个组件是经过精细优化,在速度上具有很大的优势,加载5000行数据只需要3秒,加载10000行数据只需要10秒。对比ExtJs Grid,后者虽然界面漂亮,但是下载体积和性能是其软肋。1、 功能介绍Grid组件提供的功能有:1) 点击标题排序2) 定制列宽、是否显示3) 支持序号列4) 提供复选列5) 鼠标调整列宽6) 支持自定义行、列渲染器2、 grid生成原理如下图所示,新创建的具体业务的list页面和list.js文件中是没有grid相关的代码的,但是启动tomcat之后可以在list页面查询得到该实体的数据展示列表,因此grid的实现不是在具体业务的list页面中完成的。List.jsp页面ListContent.jsp页面miracle框架中list、edit、query页面相关的jsp和js模板文件都存放在目录WebContentframeworklayouttilescrudsingle中,这些模板文件包含了一些通用组件和js脚本,所有新建具体业务的页面都通过tiles引入了对应的模板文件,因此开发者只需要在这些模板的基础上扩展自己需要的功能。Miracle中所有grid相关的代码和grid相关的样式都被封装在frameworkscriptwebfxcolumnlistincludes下的columnlist.js和columnlist.css文件中。grid组件的实现被封装在list.js文件中;实现过程如下:首先声明一个grid变量var grid = new WebFXColumnList(),然后通过doInitGrid方法初始化该grid,接着是通过doRenderGrid方法对grid的渲染等工作(grid相关的js方法可以查看list.js文件)。开发者可以通过grid变量对list页面的grid组件进行相关操作。3、 grid页面代码分析 该部分用来引入columnlist相关的脚本和样式,只有引入了这两个文件grid才能正常的实现并显示。var entityClass = depot.entity.NetDepot;var gridColumnName = id,名称,x坐标,y坐标,整备能力,能否调头,是否本务段,所属机务段,所在站,用途;var gridColumnId = id,name,xpos,ypos,capacity,canturnover,isbasicdepot,depotgroupId,stationId2,use;var gridColumnAlias = id,name,xpos,ypos,capacity,canturnover,isbasicdepot,depotgroupId,stationId2,use;var gridColumnWidth = 0,100,0,0,100,100,100,100,100,100;var gridRowIdColumnId = id;var gridData = 8,牡丹江,否,是 ,牡丹江,1,1,满洲里车间,否,是 ,牡丹江,1,;var gridOriginalData = ,0,1,2,1, ,0,1,2,1,0;entityClass 是指当前的业务对应的javaBean实体,gridColumnName是指grid中每一列的显示名称,gridColumnId是指每一列在数据库中的字段名称,gridColumnAlias是指每一列的别名,gridColumnWidth指每一列的宽度,gridRowIdColumnId指主键名称,gridData和gridOriginalData是二维数组,gridOriginalData存放的是grid中被解析的数据的原值(如数据字典等数据库中保存的数据),gridData是在list页面中的grid显示的数据,是gridOriginalData中被解析后的数据,如果gridData中显示的数据不需要解析那么在gridOriginalData中该字段是空的。4、 grid常用方法隐藏grid中复选框:grid.showCheckBoxColumn = false;获得grid中某行某字段显示值:grid.getCellValue(row,col);获得grid中某行某字段原始值: getGridOriginalData(row,col);设置grid中某一列可以高亮选择:grid.selectText = true;Action中获得list页面中复选框选中的行id值:String rowId = this.getPrimaryKeyId(request, form);String rowId s = this.getPrimaryKeyIds(request, form);5、 grid扩展grid扩展包括行扩展和列扩展,是在具体业务的list.js中可以实现,这些代码要写在doAfterInitControl或者doBeforeInitControl中。扩展1 : 将性别是“男”的行背景颜色设置为暗红色在grid显示数据加载之后对航进行渲染,即在AfterInitControl方法中添加行渲染代码。function doAfterInitControl()/ 设置行渲染器grid.setRowRender(function(eTr,row)/ 获得本行的数据var value = grid.getCellValue(row,colName2); if (value & 1)eTr.className = myHightlight;)效果如下:扩展2: 将地图上传日志中的列“上传时间”修改成连接,查看该车站的上传历史和上一个扩展一样,该需求也要写在AfterInitControl方法中,function doAfterInitControl()/ 设置行渲染器grid.setCellRender(updatedate,function(eTd,value,row,col)var stationid = getGridOriginalData(row ,stationid);eTd.innerHTML=+value+;);/打开上传地图历史查询页面function openlog()var stationid = $(stationid).value;var options = name : 上传地图历史查询,resourceId : 上传地图历史查询,link : doGetRootPath()+/gis/stationpropertylog/StationPropertyLog.do?retrieve=true&stationid=+encodeURI(stationid),reload: true,info : 上传地图历史查询;parent.parent.parent.tabtag.doMenuClicked(options);该扩展效果如下,点击上传时间的链接之后就会弹出该车站的上传地图历史查询扩展3:将列“车站名称”换成文本输入框的格式,function doBeforeInitControl()grid.setCellRender(stationid, function(eTd,value,row,col) eTd.innerHTML =;);效果如下:Tree组件本节介绍树形控件,树形控件应用不是很广泛,开发难度也大一些。Miracle里应用的是改进的XTree控件,在实用性和效率方面做了很多支持。1、 功能介绍Tree组件提供的功能有:1) 指定根结点,仅显示根结点及其子节点2) 支持复选框,并且支持级联选中父节点和子节点3) 支持延迟加载节点,加载1000个节点也飞快4) 支持Ajax加载节点5) 支持仅展开第一层节点6) 支持节点的更新2、 应用实例制作一个专业树,用来展示不同专业下的课程1) 在数据库中新建一个专业表specialtytree,结构如下:create table SPECIALTYTREE( SPECIALTY_ID VARCHAR2(40) not null, SPECIALTY_NAME VARCHAR2(50), SPECIALTY_PARENT_ID VARCHAR2(40), CREATE_USER_ID VARCHAR2(40), CREATE_STATION_ID VARCHAR2(40), LOCK_VERSION NUMBER)comment on table SPECIALTYTREE is 专业树; comment on column SPECIALTYTREE.SPECIALTY_ID is 专业ID;comment on column SPECIALTYTREE.SPECIALTY_NAME is 专业名称;comment on column SPECIALTYTREE.SPECIALTY_PARENT_ID is 上级专业;comment on column SPECIALTYTREE.CREATE_USER_ID is 创建人;comment on column SPECIALTYTREE.CREATE_STATION_ID is 创建单位;comment on column SPECIALTYTREE.LOCK_VERSION is 乐观锁;其中前三个字段“专业ID”“专业名称”“上级专业”是必须的2) 使用miracle开发插件生成specialtytree代码3) 修改SpecialtytreeAction.javapublic class SpecialtytreeAction extendsBaseSingleTreeCRUDActionSupport将父类BaseSingleEntityCRUDActionSupport改为BaseSingleTreeCRUDActionSupport4) 修改struts-bean-specialtytree.xml专业树 action!- -将中的parent属性从baseCRUDAction改为baseTreeAction,并且添加蓝色字体的property属性,其中treeRootId是可选的5) 修改struts-config-specialtytree.xml将forward中queryFrame的path路径从/framework/layout/tiles/crud/single/queryFrame.jsp改为/framework/layout/tiles/crud/tree/treeFrame.jsp6) 修改SpecialtytreeEdit.jsp将definition的值crud.single.edit改为crud.tree.edit7) 修改SpecialtytreeList.jsp将definition的值crud.single.list改为crud.tree.list8) 修改SpecialtytreeListContent.jspvar nodes = % if (list != null) for (Iterator it = list.iterator(); it.hasNext();) Specialtytree data = it.next(); % , , , , ;效果:如果在struts-bean-specialtytree.xml中设置了treeRootId的值(某条记录的id),那么根节点就会变成该节点的名称。如果不想显示复选框,则将SpecialtytreeListContent.jsp文件中的checkbox=Y改成checkbox=N。元数据Miracle2.0中已经将所有的元数据配置迁移到浏览器中,编辑样式默认值用户查询和编辑页面中有一些需要经常输入的数据,例如查询时的通过登录人或者登录人所在单位过滤,编辑时需要录入创建时间和登录人等信息。如果这些数据要用户手工录入那么系统的易用性就大大降低,miracle提供了此默认值功能。接下来,以月计划表的处理为例介绍默认值的用法。用户只能查询自己创建的月计划,在编辑界面录入新的月计划时只需要录入计划名称,其他的月份、创建人、创建时间、创建部门、创建单位要通过程序录入,并且这些默认数据是只读的;在查询页面1、 简单默认值配置流程首先在元数据中设置字段的style,将创建人、创建时间、创建部门、创建单位设置成相应的style。然后设置query页面的默认值,然后设置edit页面的默认值,以上配置完成之后运行效果如下图:查询页面中默认查询创建人是登陆用户的计划编辑页面中除了月份和计划名称之外都是与登陆用户相关只读的默认值2、 扩展默认值操作流程Miracle提供了如上的几种默认值,其中与时间相关的有新增时间、当前时间、修改时间、和登录时间,录入新增记录时新增时间指点击list页面新增按钮的时间,当前时间指点击edit页面保存按钮的时间。如果想把月份字段默认设置为下个月,miracle并没有提供“下个月”默认值,这就要自己开发。首先新建一个类NextMonthParser实现miracle系统接口DefaultValueParser,新建一个DefaultValueParser.ctx.xml文件;DefaultValueParser包含如下几个方法其中parseEdit方法是用来设置edit页面的默认值,parseQuery方法用来设置query页面的默认值,parseEdit(string,DefaultValueType)方法中的第一个参数是要展示的默认值;参数DefaultValueType类用来选择默认值类型,包括DEFAULT、INSERT、UPDATE三个可选值,INSERT指edit页面新增记录的默认值,UPDATE指edit页面修改记录的默认值,DEFAULT指其它情况下的默认值,例如查询页面。NextMonthParser类内容如下:/* 下个月 */public static final String NEXT_MONTH = next_month;/该行代码可选,但是next_month这个值是必须要规定的,用来在数据库META_DIC_DEFAULT_VALUE表中增加默认值“下个月”的记录public NextMonthParser() Overridepublic Object parseEdit(String defaultValue) return parseEdit(defaultValue ,DefaultValueType.DEFAULT );/此处选择DefaultValueType的默认情况DEFAULT,实际开发中可根据具体情况而定Overridepublic Object parseEdit(String defaultValue, DefaultValueType defaultType) return parseEdit(defaultValue , defaultType.getName();Overridepublic Object parseEdit(String defaultValue, String defaultType) /该方法用来获得下个月月份值String rtn = null;if (DefaultValueType.DEFAULT.getName().equals(defaultType)if (NEXT_MONTH.equals(defaultValue) Calendar cal = Calendar.getInstance();cal.add(Calendar.MONTH, 1);SimpleDateFormat sdf = new SimpleDateFormat(yyyyMM); Date date = cal.getTime(); rtn = sdf.format(date);return rtn ;Overridepublic Object parseQuery(String defaultValue) return parseEdit(defaultValue);DefaultValueParser.ctx.xml文件用来设置NextMonthParser的beanid,以便在数据库META_DIC_DEFAULT_VALUE表中增加默认值“下个月”的记录时调用该beanId。 下个月然后就是在数据库META_DIC_DEFAULT_VALUE表中增加默认值“下个月”的记录,其中要注意的是该表的default_value_id必须要和NextMonthParser类中的NEXT_MONTH相同, bean_id必须要和DefaultValueParser.ctx.xml文件中的bean id相同。最后按照简单默认值配置流程中介绍的,将月份字段的默认值设置为下个月。效果如下:权限管理Miracle提供了功能强大并且能够灵活运用的权限管理,权限涉及三个概念:资源、角色和用户。资源的范围非常广,包括用户登录之后程序界面左边的菜单、与菜单相对应的查询展示和修改页面、页面中的按钮、页面显示的数据等。如下图图18-1角色是资源的集合,表达了工作中的某种角色所具有的职能或者看成是具有一系列功能的一个工具,比如:普通员工角色,部门经理角色。不同的角色拥有访问不同资源的权限,如管理员可以访问系统用户管理界面的权限,而普通用户却不能访问;不同的角色对同一种资源的权限(查询、修改、删除)是不同的,有的角色只有查看数据的权限,有的角色可以查看并且可以修改删除数据;有的角色可以查看自己的部分数据,而有的角色可以查看自己的所有数据;有的角色只能查看自己的数据,有的角色可以查看本部门的甚至所有人的数据。一个角色可以分配给多个用户,一个用户可以拥有多个角色。对所有的权限需求,miracle都提供了相应的实现机制。1、 菜单和页面的权限控制miracle菜单包括三大类,开发维护菜单、系统维护菜单和具体业务菜单,其中开发维护是供程序开发者使用的,系统维护是给程序管理员使用的,具体的业务菜单分配给不同的角色之后给用户使用的。该类资源是miracle中粒度最大的资源,权限配置流程如下:首先新建角色, 点击系统菜单“系统维护”“角色维护”进入角色维护界面,例如新建一个公司员工角色,并把该角色设置为默认角色,资源中重要各数据项说明:默认角色如果项为“是”,表示该角色每个用户都会拥有。不需要再为每个用户赋权。如“普通员工”角色,可能每个人都拥有,这时如果设置为默认角色,可以大大节省权限分配时的工作量。是否启用如果该项为“否”,该角色将不会在用户授权处显示;如果已经赋权了,该角色将会失效。 资源内容资源的地址国际化标识语言国际化的标识,如果在资源文件中没有找到该标识,则使用角色名称排序号该角色在角色树中的排序号然后为角色分配资源,选中角色之后点击“分配资源”按钮,为公司员工角色分配资源,这里只分配OA中除了“考勤维护”“OA报表”中的其他页面。第三步,将角色赋给相应用户,如果角色的默认角色那么管理员不需要将该角色赋给用户,系统会自动将该角色赋给所有用户。如果不是默认角色那么管理员需要手动将该角色赋给相应的用户,点击左侧菜单中的“人员维护”进入人员维护界面,选中人员之后点击上方的“授权”按钮,进入角色分配页面如下图所示,选中要分配给用户的角色之后点击“保存”按钮即可。该页面相关说明如下:级连选中父节点表示在选中子节点的时候,同时选中父节点级连选中和取消子节点在选中父节点的时候,同时选中所有子节点,当取消父节点时,同时取消所有选中的子节点保存将当前选中的资源赋给角色说明:如果为角色“管理员”和“用户”分配了权限,并且比它们的子节点角色的权限大,那么为用户分配叶子节点对应的角色时不能勾选“级联选中父节点”复选框,防止分配叶子节点的同时将其父节点角色同时分配给用户,造成用户实际的权限扩大。2、 按钮资源的权限控制首先介绍一下按钮元素界面,如上图所示,miracle会自动为每个模块创建list页面的增删改查按钮和查询页面的查询按钮,这些默认生成的按钮的资源类型都是“按钮”,资源子类型会根据功能不能而不同。该界面中与权限相关的几个选择框有:“子类型显示模式”、“是否启用”、“授权下控制”。如果是否启用选择了否,那么所有用户都看不到该按钮,子类型显示模式是按钮资源权限控制最重要的内容,它有以下几种选择项,如果不想让用户看到该按钮,可选择始终隐藏-不受控,想让所有用户看到该按钮,可选择始终显示-不受控,想让用户看到但是不能使用该按钮,选择始终禁用-不受控,想让没有使用权限的用户看不到该按钮,选择无权限则隐藏,并且“受权限控制”选择是,想让没有使用权限的用户能看到但不能使用该按钮,选择无权限则禁用,并且“受权限控制”选择是接下来介绍如何为角色分配访问按钮资源的权限,如果想让“公司员工”角色只能查询但是不能删除周计划数据,操作如下:首先进入角色维护界面,选中“公司员工”角色并点击“分配资源”按钮,右侧出现如下图所示页面然后取消周计划中删除按钮的勾选,保存即可。第三步是按照“子类型显示模式”的设置方法将周计划中的删除按钮设置成想要的显示效果。说明:如果按照上述步骤设置之后按钮的权限控制不起作用,那么这是由数据库rbac_db_resource表中该按钮有两条记录导致的,只需要删除其中一条记录即可。3、 数据资源的权限控制数据是比较特殊的资源,是存放在数据库中的。接下来结合实际业务需求来介绍数据的权限控制:考勤系统中公司人力可以查询所有员工的考勤记录,部门经理和助理可以查看本部门所有人的考勤记录,普通员工只能查看本人

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论