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标签的使用、非UI和UI标签的分类,以及如何在JSP页面中引入Struts2标签库。下面将对这些知识点进行详细的阐述。 首先,Struts2是...
Struts 2.0 是一款流行的Java Web框架,它的核心特性之一是强大的标签库(Tag Library),这使得开发者能够更方便地在JSP页面中构建动态用户界面。本篇文章主要介绍Struts 2.0中常用的标签,以及它们在实际工作中的...
- **多线程**:理解并发编程的基本原理,掌握Thread类和Runnable接口的使用。 ##### 2. Eclipse - **开发环境搭建**:安装并配置Eclipse IDE。 - **项目管理**:学会创建、编译、调试Java项目。 - **版本控制集成**...
Struts2是一个强大的MVC框架,它提供了丰富的标签库,使得开发者在编写JSP页面时能够更加方便地处理业务逻辑和展示数据。本篇文章主要关注Struts2中的常用标签,这些标签大大简化了Web开发中的一些常见任务。 首先...
### Struts2 标签库详解 #### 一、引言 ...此外,Struts2还支持多种表达式语言,如OGNL,这使得开发人员可以在标签中使用更复杂的数据处理逻辑。总的来说,掌握这些标签对于快速构建Web应用程序具有重要意义。
6. **模板引擎**:jeesite采用了 Velocity 模板引擎,提供了一套强大的模板语言,使得页面渲染更加灵活,同时降低了前端和后端的耦合。 7. **快速开发**:jeesite提供了代码生成器,可以根据数据库表结构自动生成...
- **枚举**:提供了一种定义具有有限数量固定实例的类的方式。 - **可变参数**:方法可以接受可变数量的参数。 - **静态导入**:简化代码,避免重复书写类名。 - **注解**:用于向源代码添加元数据。 #### 2. 字符...