首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

javax.faces.model.SelectItem能用set显示数据吗?No

2013-04-07 
javax.faces.model.SelectItem能用set展示数据吗?No在JSF的项目中,我们知道javax.faces.model包下的Select

javax.faces.model.SelectItem能用set展示数据吗?No
    在JSF的项目中,我们知道javax.faces.model包下的SelectItem类可以用数组或者List的实现类来封装数据并展示。当下拉框的数据要展示排序后并且没有重复值的情况时,我们难免会想到把SelectItem封装到Set集合中。经过相关测试后发现java.util包下的Set不能封装SelectItem,先放上修改后的SelectItem代码,再一一分析:

import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

/**
* @author Zhengjiang Chu
* @version 2.0
*/
public class SelectItem extends javax.faces.model.SelectItem implements
Comparable<Object> {
/**
* serialVersionUID long
*/
private static final long serialVersionUID = -11786629707360771L;

public SelectItem() {
}

public SelectItem(Object value) {
super.setValue(value);
super.setLabel(value.toString());
}

public SelectItem(Object value, String label) {
super.setValue(value);
super.setLabel(label);
}

@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object);
}

@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}

@Override
public int compareTo(Object obj) {
return CompareToBuilder.reflectionCompare(this, obj);
}

}
    javax.faces.model.SelectItem没有自己的equals方法,我们知道封装在Set的数据必须具有可比性,所以没有equals和hashCode的SelectItem无法用Set存储。集合中有个contains方法,传入一个对象,如何集合中可以找到此对象返回true反之返回fasle,当我们想在Set集合中判断指定的SelectItem是否存在时就少不了compareTo方法。
    以上总结比较粗糙,仅做参考。

热点排行