在我们开发产品或项目的过程中,经常会遇到的用户关于对界面权限控制的需求,如一个审批表单,由基本字段和审批意见等字段组成,用户要求不同角色进入页面时,对页面中不同的输入框有不同的权限,例如申请人只能填写基本信息的输入框,对于审批意见的输入框是只读的,而审批人进入相同的页面时,可以在审批意见的输入框中填写意见。这是一个最简单的业务需求。
通常我们实现这样的需求时,需要在我们的页面中嵌入N多的if...else来实现对输入框的状态进行控制,导致了权限逻辑和页面展现混在一起,显得极其臃肿。我在使用webwork的过程中,通过对webwork源代码的深入了解,想到了修改webwork的基类UIBean来实现页面的权限控制:
1、首先将页面的权限定义保存到数据库或xml的配置文件中;
2、编写一个监听器LoadPagePermissionListener来从权限的描述文件中,加载权限信息到缓存;
3、编写页面权限过滤器,例如PagePermissionFilter,实现对页面请求的过滤;
4、当用户请求一个web表单时,首先通过.action去请求,此时.action被PagePermissionFilter过滤器拦截到,此过滤器中从用户所请求的web表单对应的XML权限描述文件或数据库中取得此web表单中所有HTML控件的权限集合,并将此集合传递给webwork的控制器,最后到webwork的HTML控件生成器的父类UIBean,由UIBean去render我们请求的表单中的所有HTML控件,这render之前,我们通过改写这个UIBean,使其在render每个控件之前,先从我们的权限集合中取出这个控件的权限(可编辑、只读、可视、不可视)进行设定,然后根据设定的权限进行渲染,最后我们看到的就是一个经过权限过滤的界面了,并且这个表单对于用户完全是透明的,开发人员不用添加任何关于表单控件权限的代码!
5、等等,到此并没有结束,由于webwork对于Select框、radio框、checkbox框等的只读显示状态并不能满足用户的需求,例如对于select框,用户要求只读状态时,不显示边框,只显示实际的字段值,呵呵,此时怎么办?没关系,见如下代码:
if ("readonly".equals(this.permission)){
if (template.equals("text") || template.equals("radio") || template.equals("checkbox") || template.equals("textarea")){
template = "labelhidden";
}
if (template.equals("select")){
template = "hidden4select";
}
}
也就是说,在只读权限时,我们直接替掉webwork默认的freemarker模板,自己写一个freemarker模板,例如我自己写了一个hidder4select的模板,实现select框在只读状态时,只显示字段值。到此为止我们完全实现了无任何代码侵入的页面原子级的权限控制
分享到:
相关推荐
WebWork是由Atlassian公司开发的一款轻量级、高性能的Java Web应用框架,它在MVC(模型-视图-控制器)架构的基础上,引入了拦截器的概念,使得业务逻辑与控制逻辑得以分离,增强了代码的可维护性和可扩展性。...
Struts 2.1是Apache软件基金会开发的一个开源框架,它是基于WebWork核心的MVC(Model-View-Controller)架构,用于构建企业级的Java Web应用程序。此框架旨在提高开发效率,提供强大的控制层,使得开发者能够更专注...
Struts 2 是一个强大的Java Web应用程序框架,它基于Model-View-Controller(MVC)设计模式,提供了灵活的架构来构建可维护性和扩展性良好的Web应用。在深入讲解Struts 2之前,我们先来了解一下MVC模式的基本概念。 ...
【基于WebWork.Hibernate的项目】是一个典型的Java Web开发框架集成应用,主要涉及WebWork作为MVC(模型-视图-控制器)框架和Hibernate作为持久层解决方案。这两个框架的结合为开发者提供了强大的功能,用于构建高效...
李刚的Struts 2.1权威指南:基于WebWork核心的MVC开发,写的很详细。一共有九个压缩文件。
不用多说了,Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版),解压出来有200多M,因为权限不怎么够,我一共分了12卷,是一本不可多得的好书。第一卷附目录: 第1章 Struts 2概述,第2章 Struts 2下的Hello...
4. **Interceptors(拦截器)**:WebWork引入了拦截器的概念,它们在Action执行前后执行,可以实现通用的功能,如权限检查、日志记录等。在源码中,你会看到这些拦截器的实现。 5. **Value Stack(值栈)**:...
4. **Interceptor(拦截器)**:拦截器是WebWork2的一个重要特性,它们是可复用的代码片段,可以插入到Action执行流程中,实现如日志记录、权限检查、事务管理等功能。通过配置,可以灵活地调整拦截器链。 5. **...
《Struts2权威指南——基于WebWork核心的MVC开发》的源代码。请完全放心,绝对保证质量。由于源码中包含jar文件,打出的包过大,只能分多次上传,请谅解。原文件大于415M,压缩后377M,分压成16个包。此为第68个包。
Struts.2权威指南--基于WebWork核心的MVC开发 学习struts2 不得多得的好书
WebWork 是一个基于Java的开源MVC(Model-View-Controller)框架,它主要用于构建企业级的Web应用程序。WebWork1.4是该框架的一个较早版本,它为开发者提供了强大的功能,包括动作映射、数据绑定、异常处理、国际化...
Struts 2是Java平台上的一个开源MVC框架,它基于WebWork的核心技术,提供了强大的动作调度、拦截器和结果映射等功能,极大地简化了Web应用程序的开发。本指南将深入探讨Struts 2框架的核心概念和技术,以及如何利用...
总的来说,这个压缩包中的WebWork 2.2.2和XWork 1.1.3 JAR包及其源代码,为开发者提供了一个深入研究Java Web应用框架的机会,有助于提升对MVC模式、动作调度、类型转换、拦截器等概念的理解。对于希望掌握或优化...
《Struts 2.1权威指南》凝聚了作者大量的实际开发经验和感悟。作者依照读者的学习规律,首先介绍基本概念和基本操作,然后对内容进行深入讲解。 2.讲解具体,示范典型 书中通过大量的示范性实例(全书范例近百个),...
- `web.xml`:Web应用的部署描述符,用于配置过滤器和servlet,确保WebWork能够正确地初始化。 3. **WebContent目录**: - `jsp`或`ftl`文件夹:存放视图文件,如JSP(JavaServer Pages)或FTL(FreeMarker模板...
《WebWork in Action》是一本专注于介绍WebWork框架的书籍,源代码的提供是为了让读者更深入地理解和实践书中的示例。WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建动态Web应用程序。它强调了代码...
是学习struts 2很好的资料,这是原代码,分成两个压缩包.
不用多说了,Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版),解压出来共200多M,因为权限有限,分了12卷上传,知道大家下得辛苦,我传的也辛苦。好书,值得收藏!
WebWork 是一个基于Java的开源MVC(Model-View-Controller)框架,它在早期的Web开发中被广泛使用,特别是在构建企业级应用时。WebWork 提供了一种灵活、可扩展的方式来组织和管理Web应用程序的逻辑,使得开发者能够...
WebWork2.0是一款基于Java的企业级Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)架构支持,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。本讲解将围绕WebWork2.0的核心概念、...