`
accpxudajian
  • 浏览: 456454 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javaweb系统的枚举设计

阅读更多

 

/*
组件目的:
	在java-web程序的研发过程中,经常使用枚举(譬如人物性别,审核状态等),枚举库存的值多半是英文或者是数字,
而前台在给用户展示的时候 ,需要对英文或者数字进行转译,就是翻译成对应的文本内容。
	很多时候都是这种模式:后台java编写constant.java枚举类,统一管理枚举;而前台则要参考constant.java的内容,
将枚举的内容写死在jsp页面,或者在前台对应的再写一个constant.js文件,和后台的constant.java想对应。
这样的代价都是显而易见的:同步问题。后台枚举增加了或者修改了,前端都要相应的修改,否则就会出错。

解决方案:前后台使用同一个枚举的配置文件。
	这个小组件展示的内容分两部分:
	1是系统枚举设计的思路。
	2是基于这个思路前端对应的代码。(后端没有给出示例,不过和前端大同小异)
*/
	

 

枚举配置xml文件:(xml不同于java文件,不用编译)

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<!-- 系统全局枚举声明文件
	此处的枚举,同时适用于后台java和前台jsp页面,反过来说:后台java和前台jsp都必须遵守这个枚举,以此达到前后台枚举同步。
 -->
<constatns>
	<!--
		结构和使用说明:
			1.根节点是constatns,紧接着是selector节点,selector节点只包含option节点。

			2.option节点的数据存储【全部使用属性】表示。

			3.selector 本身有两个属性:
				1.name表示 当前选择器的名称
				2.defaultKey 表示程序使用当前选择器的时候,使用的默认值。

			4.option 没有子节点,只有三个属性
				1.key	表示当前枚举的固定的值【和程序脱离、没有任何关系】。
				2.value	表示后台程序\数据库存储的枚举的值(和程序有关系)。(key可以和value相同,也可以不同)
				3.text	表示前台页面展示的枚举的文本(和程序有关系)。

				设置key的值,目的就是保证枚举脱离程序后,程序依然可以访问枚举。
	-->
	<!--demo: 用户性别 -->	
	<selector name="userSex" defaultKey="boy">
		<option key="boy" value="1" text="男"/>
		<option key="girl" value="0" text="女"/>
		<option key="secret" value="2" text="保密"/>
	</selector>
	
	<!-- demo: 数据审核状态 -->	
	<selector name="checkStatus"  defaultKey="tobecheck">
		<option key="tobecheck" value="0" text="待审核"/>
		<option key="passed" value="1" text="审核通过"/>
		<option key="unpassed" value="2" text="审核未通过"/>
	</selector>
</constatns>
 

 

 

 

 

/*
* 将字符串转化成XMLDom对象或者读取物理的xml文件 
* @param xmlStr xml字符串
* @param isFile 是否是物理文件( 默认是false)
* @author 胥大健 201209
*/
function createXmlDOM(xmlStr,isFile){
	var xmlDom = null;
	isFile = isFile || false;
	if(xmlStr.match(/.+[.]{1}xml/)){isFile = true;}
	
	var isIE = (navigator.userAgent.indexOf("MSIE")>=0);

	if (isIE){//IE only
		xmlDom=new ActiveXObject("Microsoft.XMLDOM");
		xmlDom.async="false";
		if(isFile){
			xmlDom.load(xmlStr);
		}else{
			xmlDom.loadXML(xmlStr);
		}
	 }else{//FF ,chrome
		 try{
			if(isFile){
				var xhr = new XMLHttpRequest();
				xhr.open("GET", xmlStr, false);
				xhr.send(null);
				xmlDom = xhr.responseXML; 
			}else{
				xmlDom=(new DOMParser()).parseFromString(xmlStr,"text/xml");
			}
		 }catch(e){
			 if(isFile){
				xmlDom = document.implementation.createDocument("","",null);
				xmlDom.async =false;
				xmlDom.loadXML(xmlStr);
			}else{
				xmlDom=(new DOMParser()).parseFromString(xmlStr,"text/xml");
			}
		  }
	}
	return xmlDom;
}


/**
* 读取constants.xml枚举配置文件,获取枚举配置的JSON对象格式的方法
* @param xmlPath 枚举配置文件的物理路径
* @return 将xml格式的枚举配置转成成JSON格式的JS对象。
* @author 胥大健 20120924
**/
function getConstantJSON(xmlPath){

	var ConstantJSON = {};

	var xmlDom = createXmlDOM(xmlPath,false);
	//JSLogger.log(xmlDom);
	var constantDOM = (xmlDom.getElementsByTagName("constatns")[0]);

	var selectorArr = constantDOM.getElementsByTagName("selector");
	for(var i=0,len=selectorArr.length;i<len;i++){
		var selector = selectorArr[i];
		var name = selector.getAttribute("name");
		ConstantJSON[name] = {};
		var optionsData = {};
		
		var optionArr = selector.getElementsByTagName("option");
		for(var j=0,len2=optionArr.length;j<len2;j++){
			var option = optionArr[j];
			var key = option.getAttribute("key");
			optionsData[key] = {
				key:option.getAttribute("key"),
				value: option.getAttribute("value"),
				text:option.getAttribute("text")
			};
			//ConstantJSON[name][key] = optionsData;
		}
		var def = selector.getAttribute("defaultKey");
		optionsData["defaultData"] = {
			key:optionsData[def].key,
			value: optionsData[def].value,
			text:optionsData[def].text
		}
		ConstantJSON[name] = optionsData;
		//ConstantJSON[name]["defaultKey"] = 
	}

	return ConstantJSON;
}
//测试:
var ConstantJSON = getConstantJSON("constants.xml");

JSLogger.logColor("获取人物性别的枚举列表:","blue");
JSLogger.log(ConstantJSON.userSex,true);
JSLogger.logColor("获取人物性别的枚举中男性的值(库存值)和显示文本(前台显示文本):","blue");
JSLogger.log(ConstantJSON.userSex.boy.value+":"+ConstantJSON.userSex.boy.text)
JSLogger.logColor("先获取默认的key值,在根据key值获取性别枚举中对应的value:","blue");
JSLogger.log("人物性别默认值 = "+ConstantJSON.userSex.defaultData.value+"("+ConstantJSON.userSex.defaultData.text+")");
JSLogger.logColor("获取审核状态的枚举列表:","blue");
JSLogger.log(ConstantJSON.checkStatus.tobecheck,true);
JSLogger.logColor("获取审核状态枚举的默认值:","blue");
JSLogger.log("审核状态默认值 = "+ConstantJSON.checkStatus.defaultData.value+"("+ConstantJSON.checkStatus.defaultData.text+")");


JSLogger.log(ConstantJSON,true);
JSLogger.log(ConstantJSON.userSex,true);
JSLogger.log(ConstantJSON.checkStatus,true);

 

 

 

 

 

 

zip附件是示例源码

 

图片附件是部分效果图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

愤怒的coder - 标准化

 

 

 

  • 大小: 42.6 KB
分享到:
评论

相关推荐

    JavaWeb 简单用户管理系统

    3. **数据字典管理模块**:数据字典通常用于存储系统中的固定值或枚举类型,如性别、状态等。在数据库中,数据字典表用于存储这些信息,JSP页面可以展示和编辑数据字典,而Servlet负责处理相关的CRUD操作。 4. **...

    javaweb实现信息管理系统

    在本项目"javaweb实现信息管理系统"中,开发者运用了一系列技术来构建一个高效、功能完善的Web应用程序。这个系统主要用于管理各种信息,如用户数据、业务数据等,以提高工作效率和数据安全性。以下是对各技术及其...

    javaweb项目+设计模式(单例模式,工厂模式,动态代理,适配器)

    在Java中实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式(线程安全)、双重检查锁定(DCL,线程安全)以及枚举单例。确保单例模式正确实现的关键在于防止多线程环境下的多次实例化和序列化/反序列化时的...

    javaweb校园管理系统源码

    "javaweb校园管理系统源码"是一个基于JavaWeb技术实现的用于管理校园事务的应用系统。...同时,对于有经验的开发者,这样的系统源码也是一个很好的参考资料,可用于学习新的设计模式或者优化现有项目的架构。

    javaWeb物资管理系统项目源码.zip

    综合以上信息,我们可以推断这个JavaWeb物资管理系统可能使用了MVC设计模式,利用Eclipse作为开发环境,可能依赖于Spring、Hibernate等开源框架来处理后端业务逻辑和数据持久化。前端可能使用JSP和JavaScript来创建...

    JavaWeb之Linux与Redis

    ### JavaWeb之Linux与Redis知识点总结 #### 一、Java注解详解 ##### 1.1 基础概念 **注解(Annotation)** 是Java语言中的一个特性,允许程序员给程序元素(如类、方法等)添加元数据。注解本身并不改变程序的行为...

    java基础与javaWEB基础

    3. **MVC模式**:Model-View-Controller模式是Web应用设计的常用架构,JavaWeb中的Spring MVC框架就是基于这一模式。 4. **JDBC与数据库交互**:Java Database Connectivity允许Java程序与各种数据库进行交互,包括...

    教学实施大纲(javaWEB方向)

    - **面向对象的设计原则**:如单一职责原则、开放封闭原则等,用于指导类和接口的设计。 **4. 异常** - **异常的概述**:异常是在程序执行过程中发生的错误情况,需要妥善处理以保证程序的稳定运行。 - **异常处理...

    java程序设计教程(清华大学)

    5. **第8章 泛型-枚举-内部类**:泛型提供了类型安全,枚举用于定义常量集合,而内部类则是Java中实现复杂设计模式的重要工具。 6. **第9章 异常**:讲解了如何处理运行时错误和异常,包括try-catch-finally语句块...

    学生管理系统

    【学生管理系统】是一个基于...总结来说,"学生管理系统"项目涉及了JavaWeb开发中的JSP、Servlet、数据库操作、MVC设计模式等多个知识点,实现了通过Web界面添加、管理幼儿信息的功能,是一个典型的Web应用实例。

    head first java 中文版

    《Head First Java》是一本非常受欢迎的Java编程入门书籍,其中文版为初学者提供了深入浅出的学习途径。这本书以其独特的“Head ...书中的实例和练习设计得生动有趣,能帮助读者在愉快的学习过程中逐步提升编程技能。

    java博客社区系统

    JDK(Java Development Kit)是开发和运行Java程序必不可少的工具集,而JDK 1.6及以上版本提供了更多的API和性能优化,支持了更多的特性,例如泛型、枚举、注解等,这些都在博客社区系统的开发中发挥着重要作用。...

    合工大Java课件

    11. **枚举与注解**:学习Java的枚举类型和注解,它们在代码中起到的重要作用。 12. **设计模式**:探讨常见的设计模式,如工厂模式、单例模式、观察者模式等,提升代码的可维护性和复用性。 通过“Java课件(全)...

    系统java学习

    - **分析、设计与实现**:从需求分析到系统设计再到编码实现的全过程。 #### 二、数据库应用 1. **Oracle数据库** - **安装/配置/管理**:包括Oracle数据库的安装过程及基本管理操作。 - **运用OEM/SQL Plus**...

    JavaEE物联

    6. **项目实战**:通过多个真实的项目训练,学员可以掌握软件架构设计思想、搜索引擎优化、工作流技术、缓存系统设计、网站负载均衡、系统性能调优等高级技术,以提升实际开发经验。 该课程适合有一定Java和...

    Java开发技术大全 电子版

    1.2.2如何设置系统环境变量6 1.2.3编译命令的使用8 1.2.4解释执行命令的使用10 1.2.5UltraEdit的使用11 1.3一个简单的Java应用程序14 1.4一个简单的Java小程序16 1.5本章小结18 第2章Java语言基础19 2.1Java...

    Java学习路线总结,搬砖工逆袭Java架构师(全网最强)(csdn)————程序.pdf

    除此之外,JavaWeb、数据库、Spring框架、Spring Boot、数据结构与算法、JVM、设计模式、Linux、SpringCloud、中间件技术、Vue前端框架、计算机网络、性能调优、系统设计、源码分析、计算机理论和阅读高质量代码的...

Global site tag (gtag.js) - Google Analytics