`
accpxudajian
  • 浏览: 451956 次
  • 性别: 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课程设计的毕业设计与代码管理系统源码.zip

    采用标准MVC模式开发 毕业设计与代码管理系统JavaWeb课程设计的毕业设计与代码管理系统源码,采用标准MVC模式开发 毕业设计与代码管理系统JavaWeb课程设计的毕业设计与代码管理系统源码,采用标准MVC模式开发 毕业...

    Javaweb博客系统页面设计

    通过学习的前端知识来构建出网页.Javaweb博客系统页面设计,包含4个页面:博客登录页,博客列表页,博客详情页,博客编辑页。 实现一个简单的博客系统. 当前先完成页面设计的部分. 通过学习的前端知识来构建出网页....

    javaweb期末课程设计大作业自助售票系统源码+数据库.zip

    javaweb期末课程设计大作业自助售票系统源码+数据库javaweb期末课程设计大作业自助售票系统源码+数据库javaweb期末课程设计大作业自助售票系统源码+数据库javaweb期末课程设计大作业自助售票系统源码+数据库javaweb...

    javaweb期末课程设计学生信息管理系统源代码.zip

    javaweb期末课程设计学生信息管理系统源代码。已实现功能:登录(验证码验证),增删改查,excel导入导出,显示头像。 使用说明 导入sql文件夹内的sql文件 运行项目 初始账户密码为Admin/123456,可更改。 javaweb...

    基于Javaweb的宠物医院管理系统毕业设计源码.zip

    基于Javaweb的宠物医院管理系统毕业设计源码基于Javaweb的宠物医院管理系统毕业设计源码基于Javaweb的宠物医院管理系统毕业设计源码基于Javaweb的宠物医院管理系统毕业设计源码基于Javaweb的宠物医院管理系统毕业...

    JavaWeb毕业设计项目源码:足球队管理系统.zip

    JavaWeb毕业设计项目源码:足球队管理系统 JavaWeb毕业设计项目源码:足球队管理系统 JavaWeb毕业设计项目源码:足球队管理系统 JavaWeb毕业设计项目源码:足球队管理系统 JavaWeb毕业设计项目源码:足球队...

    javaweb课程设计项目图书购物网站系统源代码.zip

    javaweb课程设计图书购物网站源代码。基于JSP和MySQL的网上图书购物系统。javaweb课程设计图书购物网站源代码。基于JSP和MySQL的网上图书购物系统。javaweb课程设计图书购物网站源代码。基于JSP和MySQL的网上图书...

    基于javaweb电商系统设计的开题报告 (2).docx

    基于javaweb电商系统设计的开题报告 (2).docx基于javaweb电商系统设计的开题报告 (2).docx基于javaweb电商系统设计的开题报告 (2).docx基于javaweb电商系统设计的开题报告 (2).docx基于javaweb电商系统设计的开题...

    基于javaweb电商系统设计的开题报告 (2).pdf

    基于javaweb电商系统设计的开题报告 (2).pdf基于javaweb电商系统设计的开题报告 (2).pdf基于javaweb电商系统设计的开题报告 (2).pdf基于javaweb电商系统设计的开题报告 (2).pdf基于javaweb电商系统设计的开题报告 (2...

    基于javaWeb的博客系统毕业设计项目源码(完美注释+高分必看).zip

    基于javaWeb的博客系统毕业设计项目源码(完美注释+高分必看)也可以作为期末大作业和自己研究,前后端分离的博客系统,难度适中,新手也可自己实操。 基于javaWeb的博客系统毕业设计项目源码(完美注释+高分必看...

    毕业设计基于JavaWeb技术的在线考试系统设计与实现.docx

    毕业设计基于JavaWeb技术的在线考试系统设计与实现.docx毕业设计基于JavaWeb技术的在线考试系统设计与实现.docx毕业设计基于JavaWeb技术的在线考试系统设计与实现.docx毕业设计基于JavaWeb技术的在线考试系统设计与...

    JavaWeb毕业设计之学生信息管理系统源码(源码+数据库)

    JavaWeb毕业设计之学生信息管理系统源码(源码+数据库) JavaWeb管理系统源码、javaweb项目完整案例、javaweb学生管理系统、JavaWeb毕业设计、jsp学生信息管理系统

    基于JavaWeb的毕业设计管理系统源码+数据库脚本(毕设) .zip

    基于JavaWeb的毕业设计管理系统源码+数据库脚本(毕设) .zip,已获高分通过项目。 项目简介 本项目是一套基于JavaWeb的毕业设计管理系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。...

    javaWEB 人力资源管理系统源码

    javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码...

    基于JavaWeb的在线考试系统的设计与实现毕业设计_说明.docx

    基于JavaWeb的在线考试系统的设计与实现毕业设计_说明.docx基于JavaWeb的在线考试系统的设计与实现毕业设计_说明.docx基于JavaWeb的在线考试系统的设计与实现毕业设计_说明.docx基于JavaWeb的在线考试系统的设计与...

    基于javaweb在线点餐系统毕业设计源码.zip

    基于javaweb在线点餐系统毕业设计源码.。 前台涉及的功能:餐桌的占位与取消占位,购物车功能,下单功能,菜单管理,订单管理,用户登录及记住密码,用户注册。 后台涉及的功能:餐桌管理,菜品类型管理,菜品管理...

    JavaWeb实训课程设计社区服务系统源码.zip

    JavaWeb实训课程设计社区服务系统源码JavaWeb实训课程设计社区服务系统源码JavaWeb实训课程设计社区服务系统源码JavaWeb实训课程设计社区服务系统源码JavaWeb实训课程设计社区服务系统源码JavaWeb实训课程设计社区...

    javaweb期末大作业课程设计二手闲置物品交易系统源码.zip

    javaweb期末大作业课程设计二手闲置物品交易系统源码javaweb期末大作业课程设计二手闲置物品交易系统源码javaweb期末大作业课程设计二手闲置物品交易系统源码javaweb期末大作业课程设计二手闲置物品交易系统源码...

    基于javaweb的毕业设计校园疫情防控管理系统源码+数据库.zip

    基于javaweb的毕业设计校园疫情防控管理系统源码+数据库.zip 基于javaweb的毕业设计校园疫情防控管理系统源码+数据库.zip 基于javaweb的毕业设计校园疫情防控管理系统源码+数据库.zip 基于javaweb的毕业设计校园疫情...

Global site tag (gtag.js) - Google Analytics