jstl获取常量、枚举,防止硬编码标签实现

转载请注明原文链接。

http://zhaorui1125.iteye.com/blog/2264969

直接贴代码。

标签处理Java代码:

import java.lang.reflect.Field;

/**
 * @date 2015年12月18日 上午10:26:33
 */
public class EnumTag {
	/**
	 * 根据类名、枚举名、字段名获取枚举值
	 * @param className
	 * @param enumName
	 * @param fieldName
	 * @return
	 * @throws NoSuchFieldException
	 * @throws SecurityException
	 * @throws ClassNotFoundException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static<T> T getEnumValue(String className,String enumName,String fieldName) throws NoSuchFieldException, SecurityException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException{
		Class c = Class.forName(className);
		Field f = c.getField(enumName);
		Object o =f.get(c);
		Field f1 = o.getClass().getDeclaredField(fieldName);
		f1.setAccessible(true);
		return (T)f1.get(o);
	}
	
	public static Integer getInt(String className,String enumName,String fieldName) throws NoSuchFieldException, SecurityException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException{
		return getEnumValue(className,enumName,fieldName);
	}
	
	public static String getStr(String className,String enumName,String fieldName) throws NoSuchFieldException, SecurityException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException{
		return getEnumValue(className,enumName,fieldName);
	}
}

 配置文件:

<?xml version="1.0" encoding="GB2312" ?>
<taglib xmlns=" http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation=" http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">

	<description>get enum value tld</description>
	<display-name>enum</display-name>
	<tlib-version>1.0</tlib-version>
	<short-name>enum</short-name>
  	<uri>/enum</uri>
	<function>
		<description>获取枚举值</description>
		<name>getStr</name>
		<function-class>com.mtime.b2c.tags.EnumTag</function-class>
		<function-signature>java.lang.String getStr(java.lang.String,java.lang.String,java.lang.String)</function-signature>
	</function>
	<function>
		<description>获取枚举值</description>
		<name>getInt</name>
		<function-class>com.mtime.b2c.tags.EnumTag</function-class>
		<function-signature>java.lang.Integer getInt(java.lang.String,java.lang.String,java.lang.String)</function-signature>
	</function>
</taglib>

 标签使用

<%@ taglib prefix="img" uri="/img"%>

${enum:getInt('com.xxx.b2c.constant.GoodsContentLayoutEnum','Text','value')}

猜你喜欢

转载自zhaorui1125.iteye.com/blog/2264969
今日推荐