Java枚举中的自定义属性最好不是[name]

枚举是有限的数据集合:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。

枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。

java如下定义:

package com.uet.course.enums;

/**
 * 教材:册
 * @author huangjs
 * @version 2015年2月7日9:44:34
 */
public enum Volumns {
	ALL(0,"全册"),
	UP(1,"上册"), 
	DOWN(2,"下册")
	;
	Volumns(){
		
	}
	Volumns(int id,String name){
		this.id=id;
		this.name=name;
	}
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
struts2中定义获取:

public Volumns[] getVolumns(){
	return Volumns.values();
}
前台freemarker循环展示:

<select name="info.volumnId" id="info.volumnId">
	<option value="">---选择册---</option>
	<#list volumns as volumn>
	<option value="${volumn.id}" <#if info.volumes == volumn.id>selected="selected" </#if>>
	     ${volumn.name}
	</option>
	</#list>
</select>
这样的获得name属性是会报错的。

用debug模式调适,我们可以看到获得得的数组中每个元素是这样的:

每个元素有两个name属性,一个是自身所带。另外一个是我们自定义的属性。

所以我们需要将枚举类改为下面这样:

package com.uet.course.enums;

/**
 * 教材:册
 * @author huangjs
 * @version 2015年2月7日9:44:34
 */
public enum Volumns {
	ALL(0,"全册"),
	UP(1,"上册"), 
	DOWN(2,"下册")
	;
	Volumns(){
		
	}
	Volumns(int id,String title){
		this.id=id;
		this.title=title;
	}
	private int id;
	private String title;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public static int getIdByTitle(String title,int default_value){
		Volumns[] all=Volumns.values();
		for(Volumns item : all){
			if(title.equals(item.getTitle())){
				return item.getId();
			}
		}
		return default_value;
	}
}
使用 title来代替我们自定义的name属性。

debug时可以看到如下:

前台freemarker取的时候,使用 title属性即可。

草木全
分享到:
共 0 条  此列表为空  当前1/1页

© 2014 究问社区 copyRight 豫ICP备13003319号-1