`
gegewuqin9
  • 浏览: 29668 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Velocity在页面使用枚举类

阅读更多
1.java工具类
package com.***.util;

import java.lang.reflect.Method;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.google.common.collect.Maps;

/** 
* 提供页面直接调用枚举类的方法
* @author: gegewuqin9
* @since: 2016年12月8日  下午6:31:00
* @history:
*/
public class EnumHelper {

    /**已经扫描到的类缓存起来*/
    private static final Map<String, Class<?>> ENUM_CACHE        = Maps.newConcurrentMap();

    /**扫描此包下的枚举类,暴露给页面。具体暴露的枚举类需要在下面子包中添加名称*/
    private static final String                BASE_PACKAGE_PATH = "com.***.enums";

    /**扫描上面指定的基本包下面具体的子包下面的枚举类*/
    private static final String[]              BIZ_PACKAGE_NAMES = { "common", "company", "configure", "order"                               };

    /** 
     * 功能说明:在页面上直接获取枚举类的所有项
     * 
     * @param enumName
     * @return 
     * Object
     */
    public static Object getList(String enumName) {
        Class<?> clazz = getEnum(enumName);
        if (clazz == null) {
            return null;
        }
        try {
            Method method = clazz.getMethod("values");
            if (method != null) {
                return method.invoke(clazz);
            }
        } catch (Exception e) {
        }
        return null;
    }

    /** 
     * 功能说明:在页面上直接根据code获取枚举的值
     * 
     * @param enumName
     * @param code
     * @return 
     * Object
     */
    public static Object getName(String enumName, Integer code) {
        Class<?> clazz = getEnum(enumName);
        if (clazz == null) {
            return null;
        }
        try {
            Method method = clazz.getMethod("getName", Integer.class);
            if (method != null) {
                return method.invoke(clazz, code);
            }
        } catch (Exception e) {
        }
        return null;
    }
    
    /** 
     * 功能说明:在页面上直接根据code获取枚举的值
     * 
     * @param enumName
     * @param code
     * @return 
     * Object
     */
    public static Object getName(String enumName, String code) {
        Class<?> clazz = getEnum(enumName);
        if (clazz == null) {
            return null;
        }
        try {
            Method method = clazz.getMethod("getName", String.class);
            if (method != null) {
                return method.invoke(clazz, code);
            }
        } catch (Exception e) {
        }
        return null;
    }

    /** 
     * 功能说明:根据枚举类名称获取具体的枚举类Class
     * 
     * @param enumName
     * @return 
     * Class<?>
     */
    private static Class<?> getEnum(String enumName) {
        if (StringUtils.isEmpty(enumName)) {
            return null;
        }
        if (ENUM_CACHE.containsKey(enumName)) {
            return ENUM_CACHE.get(enumName);
        }
        for (String packageName : BIZ_PACKAGE_NAMES) {
            String classPath = BASE_PACKAGE_PATH + "." + packageName + "." + enumName;
            try {
                Class<?> clazz = Class.forName(classPath);
                if (clazz != null) {
                    ENUM_CACHE.put(enumName, clazz);
                    return clazz;
                }
            } catch (Exception e) {
            }
        }
        return null;
    }
}


注:
1.我们项目在enums包下还根据具体业务分了包,如果枚举类直接在emuns目录下,可以不用for循环,只定义BASE_PACKAGE_PATH就行了。
2.getName方法需要自己做枚举类里定义为static方法

2.配置toolbox.xml
<toolbox>
	<tool>
		<key>enumHelper</key> 
		<scope>application</scope> 
	   	<class>com.***.util.EnumHelper</class>
	</tool>
</toolbox>


3.页面使用
循环:#foreach($!type in $!enumHelper.getList("OrderTypeEnum"))
根据code获取值:$!enumHelper.getName("OrderTypeEnum", "1")
分享到:
评论

相关推荐

    struts2资料

    从上述文件内容中,我们可以了解到Struts2框架中的一些核心知识点,主要包括Struts2标签的使用、非UI和UI标签的分类,以及如何在JSP页面中引入Struts2标签库。下面将对这些知识点进行详细的阐述。 首先,Struts2是...

    struts 2.0系列2常用的Struts 2.0的标签(Tag)介绍

    Struts 2.0 是一款流行的Java Web框架,它的核心特性之一是强大的标签库(Tag Library),这使得开发者能够更方便地在JSP页面中构建动态用户界面。本篇文章主要介绍Struts 2.0中常用的标签,以及它们在实际工作中的...

    java初学者的比较好的学习路线(转)

    - **多线程**:理解并发编程的基本原理,掌握Thread类和Runnable接口的使用。 ##### 2. Eclipse - **开发环境搭建**:安装并配置Eclipse IDE。 - **项目管理**:学会创建、编译、调试Java项目。 - **版本控制集成**...

    Struts2常用标签

    Struts2是一个强大的MVC框架,它提供了丰富的标签库,使得开发者在编写JSP页面时能够更加方便地处理业务逻辑和展示数据。本篇文章主要关注Struts2中的常用标签,这些标签大大简化了Web开发中的一些常见任务。 首先...

    struts2标签介绍

    ### Struts2 标签库详解 #### 一、引言 ...此外,Struts2还支持多种表达式语言,如OGNL,这使得开发人员可以在标签中使用更复杂的数据处理逻辑。总的来说,掌握这些标签对于快速构建Web应用程序具有重要意义。

    开源jeesite框架

    6. **模板引擎**:jeesite采用了 Velocity 模板引擎,提供了一套强大的模板语言,使得页面渲染更加灵活,同时降低了前端和后端的耦合。 7. **快速开发**:jeesite提供了代码生成器,可以根据数据库表结构自动生成...

    顶级IT公司面试题

    - **枚举**:提供了一种定义具有有限数量固定实例的类的方式。 - **可变参数**:方法可以接受可变数量的参数。 - **静态导入**:简化代码,避免重复书写类名。 - **注解**:用于向源代码添加元数据。 #### 2. 字符...

Global site tag (gtag.js) - Google Analytics