`
chenp1111
  • 浏览: 239805 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

枚举类型数据定义和使用

 
阅读更多
1,web.xml定义一个系统的过滤器
<listener>
		<listener-class>com.zainta.pregnancy.web.listener.ServletContextLoaderListener</listener-class>
	</listener>

2,写这个filter的内容
package com.zainta.pregnancy.web.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class ServletContextLoaderListener implements ServletContextListener {

	
	public void contextDestroyed(ServletContextEvent event) {
		ServletContext servletContext = event.getServletContext();

		// 通过WebApplicationContextUtils 得到Spring容器的实例。
		ApplicationContext application = WebApplicationContextUtils
				.getWebApplicationContext(servletContext);
		// 返回Bean的实例。
		SystemServletContextLoader systemServletContextLoader = (SystemServletContextLoader) application
				.getBean("systemServletContextLoader");
		
		
		//初始化所有的枚举类型的实体
		systemServletContextLoader.closeServletContext(servletContext);
	}

	public void contextInitialized(ServletContextEvent event) {
		ServletContext servletContext = event.getServletContext();

		// 通过WebApplicationContextUtils 得到Spring容器的实例。
		ApplicationContext application = WebApplicationContextUtils
				.getWebApplicationContext(servletContext);
		// 返回Bean的实例。
		SystemServletContextLoader systemServletContextLoader = (SystemServletContextLoader) application
				.getBean("systemServletContextLoader");
		
		//初始化
		systemServletContextLoader.initServletContext(servletContext);
		
	}

}

3,spring配置一个systemServletContextLoader的bean
<bean id="systemServletContextLoader" class="com.zainta.pregnancy.web.listener.SystemServletContextLoader">
		<property name="enumEntityPackage" value="${enumration.entity.package}"></property>
	</bean>


${enumration.entity.package}这个是系统定义枚举类型所放置的包,比方叫com.xxxx.entity.enumeration

4,这个bean所得对应的内容如下
/**
 * 
 */
package com.zainta.pregnancy.web.listener;

import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;

import com.opensymphony.xwork2.util.ResolverUtil;

/**
 * @author Downpour
 * 
 */
@Component("systemServletContextLoader")
public class SystemServletContextLoader {

	private static final Log logger = LogFactory
			.getLog(SystemServletContextLoader.class);

	private String enumEntityPackage;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.demo2do.core.web.loader.ServletContextLoader#initServletContext(javax
	 * .servlet.ServletContext)
	 */
	public void initServletContext(ServletContext servletContext) {

		if (logger.isDebugEnabled()) {
			logger.debug("Initial ServletContext for system");
		}

		// alias enum entity to servletContext
		aliasEnumEntity(servletContext);

		servletContext.setAttribute("ctx", servletContext.getContextPath());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.demo2do.core.web.loader.ServletContextLoader#closeServletContext(
	 * javax.servlet.ServletContext)
	 */
	public void closeServletContext(ServletContext servletContext) {

		if (logger.isDebugEnabled()) {
			logger.debug("Destroying ServletContext for system");
		}

		servletContext.removeAttribute("enums");

		servletContext.removeAttribute("ctx");
	}

	/**
	 * Alias Enum entity under entity package
	 * 
	 * @param servletContext
	 */
	protected void aliasEnumEntity(ServletContext servletContext) {

		// first find out all the enum classes according to the entity packages
		ResolverUtil<Object> resolver = new ResolverUtil<Object>();
		resolver.find(new ResolverUtil.Test() {
			@SuppressWarnings({ "rawtypes" })
			public boolean matches(Class type) {
				return Enum.class.isAssignableFrom(type);
			}

			@Override
			public boolean matches(URL resource) {
				// TODO Auto-generated method stub
				return false;
			}

			@Override
			public boolean doesMatchClass() {
				return true;
			}

			@Override
			public boolean doesMatchResource() {
				// TODO Auto-generated method stub
				return false;
			}
		}, enumEntityPackage);

		Map<String, Object> enums = new HashMap<String, Object>();

		for (Class<?> clazz : resolver.getClasses()) {
			String key = clazz.getName().substring(
					clazz.getName().lastIndexOf(".") + 1);
			try {
				enums.put(key, clazz.getMethod("values").invoke(clazz));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		servletContext.setAttribute("enums", enums);
	}

	public String getEnumEntityPackage() {
		return enumEntityPackage;
	}

	public void setEnumEntityPackage(String enumEntityPackage) {
		this.enumEntityPackage = enumEntityPackage;
	}

}

这个类通过配置的枚举类型所放的包,通过反射的方式拿到枚举类型
5,枚举类型的类如下
package com.zainta.pregnancy.entity.enumeration;

/**
 *@author : rannie.chen@zainta.com	
 *@version: 2012-10-24上午10:16:27
 *@desc:
 */
public enum FakeStatus {

	//0,非冒名
	NOTFAKED("enum.fake_status.notfaked"),
	//1,疑似
	UNSURE("enum.fake_status.unsure"),
	//2,冒名
	FAKED("enum.fake_status.faked");
	
	FakeStatus(String key) {
		this.key = key;
	}
	
	String key;

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public int getOrdinal() {
		return this.ordinal();
	}
	
}


message_zh_CN.properties配置文件如下
#enum
enum.fake_status.notfaked=非冒名
enum.fake_status.unsure=疑似
enum.fake_status.faked=冒名


6,jsp页面如使用方式
    a,<%@ taglib   prefix="fmt" uri= "http://java.sun.com/jsp/jstl/fmt" %>
<fmt:setBundle basename ="message" />这是配置枚举类型显示的文件
message_zh_CN.properties,这个要在spring配置文件预先加载
    b,使用如下
   
<select name = "">
						<option value = "">--请选择--</option>
						<c:forEach items="${enums['FakeStatus']}" var = "fakeStatus">
							<option value = "${fakeStatus}">
								<fmt:message key = "${fakeStatus.key}"></fmt:message>
							</option>
						</c:forEach>
					</select>




分享到:
评论

相关推荐

    QML 中使用 C++定义的枚举类型

    如果要在 QML使用 C++中定义的类型,有些数据类型是是可以直接使用的,如常见的 int,但是还有一些相对特殊的类型就需要做些特定的操作才可以使用了。 博客地址:...

    枚举类型的复杂用法:非常有用的枚举类型使用例子,简化了数据采集通道的定义。

    非常有用的枚举类型使用例子,简化了数据采集通道的定义。

    thinkPHP调用枚举类型

    thinkPHP调用枚举类型,里面根据参数不同返回值不同,初步只封装了input(radio、check)、td、select等。

    枚举数据类型详细介绍

    详细介绍枚举数据类型的定义及在c语言中的应用

    详解C++11强类型枚举

    枚举类型是C/C++中用户自定义的构造类型,它是由用户定义的若干枚举常量的集合。枚举值对应整型数值,默认从0开始。比如定义一个描述性别的枚举类型。 enum Gender{Male,Female}; 其中枚举值Male被编译器默认赋值为...

    laravel-enum:更方便地在项目中定义并使用枚举

    $casts 特性,将查询出的数据自动转换成枚举实例提供了便捷的比较方法is、isNot和in,用于枚举实例之间的对比内置了多种实用的枚举集:标准的 Http 状态码枚举定义,方便在 API 返回响应数据时设置 Http 状态码;...

    Eclipse3.1中体验J2SE5.0之枚举类型

    本文将介绍J2SE5.0中三个比较重要的特性:枚举类型,注释类型,范型,并在此基础上介绍在如何在Eclipse3.1开发环境中开发枚举类型,注释类型和范型应用。J2SE5.0(Tiger)的发布是Java语言发展史上的一个重要的里程碑,是...

    Java 基础枚举.pdf

    什么是枚举? 枚举是一种特殊的数据类型,用于定义具有固定个数的常量集。它可以帮助我们更好地管理常量,使代码更...在这个例子中,我们定义了一个枚举类型Day,其中包含了七个常量值:MONDAY、TUESDAY、WEDNESDAY、TH

    C#中可枚举类型详解

    我们经常使用的大多数集合实际上都已经实现了枚举的接口IEnumerable和IEnumerator接口,这样才能使用foreach迭代,有些是含有某种抽象了枚举细节的接口:ArrayList类型有索引,BitArray有Get方法,哈希表和字典有键...

    C语言程序设计题库 第八章:结构体、共用体和枚举类型

    结构体可由多中数据类型的元素组成(将不同的数据类型组合成为一个整体),比如描述一个学生信息,学生的学号使用long int类型存储、年龄用int类型存储、姓名用字符串(字符数组)存储。如果是一个学生,可以只需声明3个...

    《C语言学习辅导》自定义数据类型11

    第十章 构造数据类型及其应用本章学习目标:掌握枚举类型、结构体类型、联合体类型的定义了解枚举类型、结构体类型、联合体类型及其变量的区别了解枚举类型、结构体类型、

    《C语言学习辅导》自定义数据类型21

    第十章 构造数据类型及其应用本章学习目标:掌握枚举类型、结构体类型、联合体类型的定义了解枚举类型、结构体类型、联合体类型及其变量的区别了解枚举类型、结构体类型、

    《C语言学习辅导》自定义数据类型31

    第十章 构造数据类型及其应用本章学习目标:掌握枚举类型、结构体类型、联合体类型的定义了解枚举类型、结构体类型、联合体类型及其变量的区别了解枚举类型、结构体类型、

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    11.10.1 枚举类型的定义和枚举变量的说明 184 11.10.2 枚举类型变量的赋值和使用 185 11.11 类型定义符typedef 12 位运算 12.1 位运算符C语言提供了六种位运算符: 189 12.1.1 按位与运算 191 12.1.2 按位或运算 ...

    c语言课后习题

    单项选择题 (1)在声明一个结构体类型时系统分配给它的存储空间是 。... 可以在定义枚举类型时对枚举元素进行初始化 C. 枚举元素表中的元素有先后次序,可以进行比较 D. 枚举元素的值可以是整数或字符串 【答】D

    Visual C++开发实战1200例 第3章

    实例086枚举类型的定义与使用 实例087用new动态创建结构体 实例088使用结构体标识操作员名称密码和级别 实例089创建包括12个月份的枚举类型 实例090带有函数的结构体 3.2 指针、地址与引用 实例091使用指针自增操作...

    程序设计基础\第2章c语言基本数据类型及运算.ppt

    基本类型包括整型、实型、字符型等,而构造类型包括数组、结构体、枚举类型、共用体等。 基本类型: * 整型:包括带符号整型和无符号整型两种,无符号整型只能表示正数,而带符号整型可以表示负数。 * 实型:包括...

    自建数据类型_C语言_

    C语言中用户自己建立的数据类型:包含结构、结构体组、结构体指针的定义和使用、指针处理链表、共用体、枚举的定义和使用。

    C++实验2 类与对象

    (1)定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop,其中rank为枚举类型CPU_ Rank,定义为enum CPU_ Rank(P1 = 1,P2,P3,P4,P5,P6,P7),frequency为...

Global site tag (gtag.js) - Google Analytics