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

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


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);
}

}

[size=medium] javax.faces.model.SelectItem没有自己的equals方法,我们知道封装在Set的数据必须具有可比性,所以没有equals和hashCode的SelectItem无法用Set存储。集合中有个contains方法,传入一个对象,如何集合中可以找到此对象返回true反之返回fasle,当我们想在Set集合中判断指定的SelectItem是否存在时就少不了compareTo方法。
以下是个简单的demo:[/size]

@Test
public void testSelectItemSet(){
//import javax.faces.model.SelectItem;
Set<SelectItem> set = new TreeSet<SelectItem>();
SelectItem item = new SelectItem("aaa");
SelectItem item1 = new SelectItem("aaa");
SelectItem item2 = new SelectItem("bbb");
SelectItem item3 = new SelectItem("123");
SelectItem item4 = new SelectItem("123");
SelectItem item5 = new SelectItem("bbb");
SelectItem item6 = new SelectItem("caa");
set.add(item);
set.add(item1);
set.add(item2);
set.add(item3);
set.add(item4);
set.add(item5);
set.add(item6);
System.out.println(set.size());
//java.lang.ClassCastException: javax.faces.model.SelectItem cannot be cast to java.lang.Comparable
}

[size=medium]以上总结比较粗糙,仅做参考。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值