`
chenp1111
  • 浏览: 241819 次
  • 性别: 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,但是还有一些相对特殊的类型就需要做些特定的操作才可以使用了。 博客地址:...

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

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

    易语言模拟枚举类型

    在易语言中,枚举类型(Enum)是一种特殊的数据类型,用于定义一组具有特定名称的常量。这些常量在程序中代表特定的值,使得代码更易于理解和维护。然而,易语言本身并不直接支持枚举类型,因此程序员需要通过一些...

    Java枚举类型Enum的用法

    总结来说,Java枚举类型提供了一种安全、类型安全的方式来定义和使用常量,它可以拥有构造器、方法和字段,并能与switch语句、序列化、反射等Java特性很好地结合。理解并熟练使用枚举,能够使代码更加清晰、易读,...

    springboot项目中枚举类型的最佳实践

    在Spring Boot项目中,枚举类型(Enums)的使用是一种常见的数据表示方式,它们提供了类型安全和可维护性。本文将深入探讨如何在Spring Boot应用中实现枚举类型的最佳实践,包括前端与后端交互、数据库操作以及序列...

    ActionScript3.0 枚举类型的使用

    一旦定义了枚举类型,就可以像使用其他类一样来使用它。例如,假设我们有一个`PrintJob`类,它可以用来创建打印作业,我们可以使用`PrintJobOrientation`来设置打印作业的方向: ```as3 var pj:PrintJob = new ...

    枚举类型的使用

    枚举类型(Enumeration)在编程语言中是一种特殊的数据类型,用于定义一组有限的常量,这些常量通常代表特定的值或状态。枚举在很多编程语言中都有所支持,如C#、Java、C++和Python等。本文将深入探讨枚举类型的使用...

    12-结构体、共用体和枚举类型-自己使用的C语言教程PPT-适合老师备课或者自学.pptx

    枚举类型的定义需要使用关键字enum,并且需要指定枚举类型的名称和枚举值。枚举类型的定义的一般形式为:enum 枚举类型名 { 枚举值1, 枚举值2, ……, 枚举值n};其中,enum是枚举类型的标志,枚举类型名是由用户定义...

    C# 枚举类型的实例说明

    C#中的枚举类型是一种非常实用的数据类型,它允许开发者定义一组命名的常量集合,这些常量通常代表一个特定的数值。通过枚举类型,我们可以将一系列相关的值组织在一起,提高代码的可读性和可维护性。在本文中,我们...

    java中的枚举类型

    Java 中的枚举类型是一种特殊的数据类型,它允许我们定义一组命名的常量。枚举类型骨子里是一个类别,所以您编译完成后,会产生一个 `.class` 档案。 枚举类型的用法 在 Java 中,我们可以使用 `enum` 关键词来...

    Python中的枚举类型:使用指南与实践应用

    本文将详细介绍如何在Python中使用枚举类型,包括枚举的定义、使用和一些实践应用。 枚举类型是Python中一种非常有用的数据类型,它可以帮助开发者以一种结构化和可读性高的方式处理一组相关的常量。通过本文的详细...

    thinkPHP调用枚举类型

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

    java枚举类型说明

    - **定义**: 使用`enum`关键字定义枚举类型,可以在枚举类型中定义一组固定的值,这些值都是该枚举类型的实例。 - **实例**: 枚举类型的每一个值都可以看作是该枚举类型的一个实例。例如,在上面的例子中,`Grade`...

    西门子TIA博图数据块中数据类型的定义.pdf

    例如,如果一个自动化项目需要跟踪一个设备的状态,用户可以创建一个包含所有可能状态的枚举类型。 在TIA博图中定义数据类型的基本步骤如下: 1. 打开TIA博图软件,创建或打开一个项目。 2. 在项目树中找到数据块...

    Python中的枚举类型:使用Enum类的详细指南

    本文将详细介绍如何在Python中使用枚举类型,包括枚举的基础概念、创建和使用枚举类的步骤,以及枚举在实际编程中的应用案例。 枚举类型是Python中一个强大的特性,它可以帮助开发者编写更清晰、更易于维护的代码。...

    5-枚举类型、输入输出、处理

    在编程领域,枚举类型(Enumeration Type)是一种强大的工具,用于定义一组预定义的常量。这些常量通常表示特定的值集合,如颜色、星期、状态等。...理解和熟练使用枚举类型是任何开发者必备的技能之一。

    枚举类型的定义和应用总结

    枚举类型(enumerated type),在编程语言中是一种强大的数据类型,它允许程序员定义一组具有特定名字的常量。这些名字通常表示特定的值,它们是整数类型的,且值的范围由程序员在定义时指定。枚举类型有助于提高...

    Java枚举数据类型.pdf

    Java 枚举数据类型 Java语言中没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。这被称作int枚举模式。这种模式存在两个问题:类型安全...这样,我们可以使用枚举类型来提高类型安全性和可读性。

    Java中的枚举类型Enum示例源代码

    枚举类型还可以与其他集合框架结合使用,例如`EnumSet`和`EnumMap`。`EnumSet`是专为枚举设计的高效集合,而`EnumMap`则是一个以枚举类型为键的映射表。 在枚举类型中,还可以定义抽象方法,所有枚举常量必须实现...

Global site tag (gtag.js) - Google Analytics