场景:
实体中使用了枚举,这些东西在页面表现为一个下拉选择框.如何通用,是我要想的
代码:
Class cls = Class.forName(className);
//这里直接判定枚举类型的一个特性,就是总是继承Enum这个超类
if(cls.getSuperclass()!=null && Enum.class.getName().equals(cls.getSuperclass().getName())){
Class<Enum> enumClass = (Class<Enum>)cls;
//获取枚举的所有属性对象集合
EnumSet es =EnumSet.allOf(enumClass);
Object[] objs = es.toArray();
String enumLabelName = null;
StringBuilder builder = new StringBuilder();
String equalsValue;
for (int i = 0; i < objs.length; i++) {
Object object = objs[i];
if(object instanceof EnumInterface){ //这个接口是我们的枚举规范,总是要实现这个接口,返回一个字符串说明
EnumInterface ei = (EnumInterface)object;
enumLabelName = ei.getName();
}
if(enumLabelName==null){
enumLabelName = object.toString();
}
equalsValue = i+"";
if(useOrdinal!=null){
equalsValue = object.toString();
}
builder.append("<option value='"+object.toString()+"' " +
(currentValue!=null && currentValue.equals(equalsValue)?" selected ":"") +
">"+enumLabelName+"</option>");
enumLabelName = null;
}
Struts2Utils.renderHtml(builder.toString());
//发挥一下 , 利用struts 的 <s:action executeResult="true"> 这个标签,可以形成统一的调用接口