首页 java基础 反射,枚举实际应用例子

反射,枚举实际应用例子

遇到的问题 一个List<Object>的列表。。 列表中有枚举类型 枚举类型在页面显示的 时候就不能通过。…

遇到的问题

一个List<Object>的列表。。

列表中有枚举类型

枚举类型在页面显示的 时候就不能通过。属性来取数据

用反射

根据名字去匹配对应的类名 从而获取对应的属性值(反射)

 

jsp页面

<%@taglib uri="/WEB-INF/tld/MethodUtil.tld" prefix="methodUtil"%>
<td> <methodUtil:value className="xxxUtil" path="com.yq1012.utils" method="convert" param="枚举类型"/> </td>

tld

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE taglib
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
	<tlib-version>1.0</tlib-version>
	<jsp-version>2.4</jsp-version>
	<short-name>m</short-name>
	<uri>/tlds/MethodUtil.tld</uri>
	<description>
		This Tag Library makes user develope JSP with method Value component easily.
	</description>

    <!--**********************************************-->
    <!--              Tag                       -->
    <!--**********************************************-->
	<tag>
		<name>value</name>
		<tag-class>com.yq1012.MethodUtilTag</tag-class>
		<body-content>empty</body-content>

		<attribute>
			<name>className</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<description>
            	className
            </description>
		</attribute>

		<attribute>
			<name>method</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<description>
            	method
            </description>
		</attribute>

        <attribute>
            <name>paramType</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <description>
            	paramType
            </description>
        </attribute>

        <attribute>
            <name>param</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <description>
            	param
            </description>
        </attribute>
        <attribute>
            <name>path</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <description>
            </description>
        </attribute>
     </tag>
</taglib>

反射帮助类

import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;


@SuppressWarnings("unused")
public class MethodUtilTag extends SimpleTagSupport {

	private String className;
	private String method;
	private String paramType;
	private String param;
	private String path;

	@Override
	@SuppressWarnings("unchecked")
	public void doTag() throws JspException, IOException {
		JspWriter out = getJspContext().getOut();

		Class[] parasClass = null;
		Object[] args = null;
		if(StringUtil.isNotEmpty(param)) {
			if(param.contains(",")) {
				String[] params = StringUtil.split(param, ",", false);
				parasClass = new Class[params.length];
				args = new Object[params.length];
				for (int i = 0; i < parasClass.length; i++) {
					parasClass[i] = String.class;
					args[i] = params[i];
				}
			}
		}
		Class classType = String.class;

		String value = "";
		if("int".equals(paramType) || "Integer".equals(paramType)) {
			classType = Integer.class;
		} else if("double".equals(paramType) || "Double".equals(paramType)) {
			classType = Double.class;
		}


		if(StringUtil.isNotEmpty(className) && StringUtil.isNotEmpty(method)) {
			try {
				String packagePath = this.className;
				if(StringUtil.isNotEmpty(path)) {
					packagePath = this.path + "." + packagePath;
				} else {
					packagePath = "这里是类的包名字." + packagePath;
				}

				Class clazz = Class.forName(packagePath);
				Object newInstance = clazz.newInstance();

				Method m = null;
				Object object = null;
				if(parasClass != null) {
					m = clazz.getMethod(method, parasClass);
					object = m.invoke(newInstance, args);
				} else {
					m = clazz.getMethod(method, classType);
					object = m.invoke(newInstance, new Object[]{param});
				}

				value = object.toString();

			} catch (Exception e) {
				value = "";
				e.printStackTrace();
			}
		}
		out.print(value);

	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public String getMethod() {
		return method;
	}

	public void setMethod(String method) {
		this.method = method;
	}

	public String getParam() {
		return param;
	}

	public void setParam(String param) {
		this.param = param;
	}

	public String getParamType() {
		return paramType;
	}

	public void setParamType(String paramType) {
		this.paramType = paramType;
	}

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

}

反射转换实体类

public class xxxUtil {



	public String  convert(String value){
		if ("yq1012".equals(value)) {
			return 枚举.getName();//枚举的要导入对应的包名字
		}  else {
			return null;
		}
	}

}

 

 

 

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

26个大小写字母对应的哈希值

26个大小写字母对应的哈希值

大写字母: 小写字母 A 对应的哈希值:65 B 对应的哈希值:66 C 对应的哈希值:67 D 对应的哈希值:68 E...
linux 把文件名字写入到txt

linux 把文件名字写入到txt

1、首先连接上linux主机,进入到需要处理的目录,例如“/”目录。   2、输入:ls -1 > 1....
git 流程开发

git 流程开发

前提条件:不能在 master 分支上修改任何文件。master 分支的变更只能通过 git pull 和 git me...
使用Git将本地文件提交到远程仓库

使用Git将本地文件提交到远程仓库

使用Git将本地文件提交到远程仓库 使用Git将本地文件提交到远程仓库 现在要将本地代码推到git远程仓库保存,可以提交...
将博客搬至CSDN

将博客搬至CSDN

将博客搬至CSDN
返回顶部