`
gegewuqin9
  • 浏览: 28884 次
  • 性别: 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")
分享到:
评论

相关推荐

    velocity入门使用教程

    教程内容包含了解Velocity模板引擎的基础知识、学习VTL语法、设置和使用velocity.properties配置文件以及如何在Servlet和Spring MVC环境中集成Velocity。 ### Velocity模板引擎的基本使用方法 Velocity可以用来...

    使用velocity

    在开始使用Velocity之前,首先需要完成以下步骤: 1. **下载Velocity库**:访问Velocity工程首页(http://velocity.apache.org)下载最新版本的Velocity库。 2. **创建项目**:使用IDE如Eclipse创建一个新的Java...

    velocity实现静态页面分页

    本文将深入探讨如何使用Velocity来实现静态页面的分页功能。 一、Velocity简介 Velocity是由Apache软件基金会开发的开源项目,它提供了一个简单的模板语言,使得开发者可以将内容与展示逻辑分离,让设计人员专注于...

    velocity生成静态页面实例

    在“velocity生成静态页面实例”中,我们首先需要一个 Velocity模板文件(通常以`.vm`为扩展名),在这个文件中,我们可以使用Velocity语法来定义页面结构,并插入动态数据占位符。例如,我们可以写一个简单的模板:...

    velocity文档(Velocity1.4java开发指南中文版,Velocity1.4模板使用指南中文版中文版)

    ** Velocity 概述** Velocity 是一个开源的 Java 模板引擎,它允许开发者...通过上述步骤,你将能够熟练地使用 Velocity 1.4 进行 Java Web 开发,将动态数据无缝地融合到静态页面中,提升项目的开发效率和用户体验。

    freemarker&velocity的使用

    1. **引用和指令**:Velocity使用`${variable}`引用变量,而`#set`、`#if`、`#foreach`等指令实现控制结构。与Freemarker相比,Velocity的语法更加简洁。 2. **上下文对象**:在Velocity中,数据模型通常称为“上...

    Velocity模板使用指南中文版

    ** Velocity 模板使用指南中文版 ** Velocity 是一个基于 Java ...通过阅读这份《Velocity 模板使用指南中文版》,你将能够掌握 Velocity 的基础和进阶知识,从而在实际项目中灵活运用 Velocity 实现高效的模板渲染。

    velocity语法与使用方法

    Velocity允许在模板中定义变量,并在后续使用中引用这些变量。变量定义通常使用`#set`指令进行: - 示例:`#set($name="hello")`,定义了一个名为`$name`的变量,其值为`hello`。 - 变量引用可以使用`${variable}`或...

    velocity的jar包

    1. **模板引擎**:Velocity提供了一个强大的模板引擎,允许开发者使用简单的文本格式来创建动态页面,模板中的指令由#号开头,如#{if}、#{foreach}等。 2. **模板语言**:Velocity模板语言(VTL)是 Velocity 的...

    使用了Struts结构和Velocity模板技术的BLOG

    Struts和Velocity是两种在Java Web开发中广泛使用的开源框架,它们在构建高效、可维护的Web应用程序中扮演着重要角色。本项目“使用了Struts结构和Velocity模板技术的BLOG”旨在演示如何结合这两种技术来创建一个...

    velocity入门使用

    然后,配置Velocity的初始化参数,例如在Spring框架中,可以通过`VelocityConfigurer`类进行配置: ```java @Configuration public class VelocityConfig { @Bean public VelocityEngine velocityEngine() { ...

    Velocity学习Web项目

    在Struts 1.x版本中,视图通常由JSP页面来实现,但也可以使用Velocity模板来替代,因为Velocity提供了更简洁的语法和更好的性能。 在集成Velocity之前,我们需要确保我们的环境已经配置了Struts 1.x和Velocity。这...

    Velocity初始化过程解析

    4. **Parser Pool**:为了提高性能,Velocity使用解析池来复用解析器对象。 5. **Global Cache**:全局缓存用于存储模板和其他资源的元数据,提高访问速度。 6. **Static Content Include System**:处理静态内容...

    模板:velocity和freemarker的比较

    在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity 作为 View,模板技术作为 View 的好处是很多,尤其和 JSP 比较起来优点更大。 Velocity 和 Freemarker 都是开源的模板技术,它们都提供了强大的功能...

    sitemesh2 集成velocity 装饰页面乱码

    3. **velocity模板**:在velocity模板文件(.vm)顶部添加`#set($encoding = "UTF-8")`指令,确保模板在解析时使用UTF-8编码。 4. **sitemesh配置**:修改sitemesh的配置文件(通常为`sitemesh.properties`),设置...

    velocity jar包

    这个jar包包含了Velocity引擎的所有核心类和依赖,使得我们能够在Java代码中使用Velocity API来处理模板。例如,可以创建一个`VelocityEngine`实例,加载模板文件,然后设置上下文(context)对象,将需要的数据绑定到...

    velocity使用说明doc文档

    Velocity 提供了一种简单而强大的脚本语言——Velocity 模板语言 (VTL),让页面设计者能够在不涉及 Java 代码的情况下插入和处理动态内容。 VTL 的主要特点是通过引用 (references) 来访问和操作由 Java 代码定义的...

Global site tag (gtag.js) - Google Analytics