`
Elvin.Chu
  • 浏览: 15613 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

    博客分类:
  • JSF
jsf 
阅读更多
   在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方法。
以下是个简单的demo:

@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
	}

    以上总结比较粗糙,仅做参考。
0
0
分享到:
评论

相关推荐

    javax.faces-2.2.0.jar

    javax.faces.jar的高版本在国内网站几乎找不到,因为在研究richfaces 和primefaces,文档中说需要用到javax.faces-2.1.28或者更高版本,无奈百度搜索不到,只有想法在谷歌找,特地分享出来,想要更高版本 联系我!

    javax.faces-2.1.12.jar

    很难找的jar包下载,绝对仅有!放心下载!

    javax.faces-api-2.2.jar

    在搭建spring4.3源码阅读环境的时候,spring-web项目报错,发现是少了javax.faces-api-2.2.jar文件,引入此文件可解决spring-web项目报错问题。

    javax.jms.jar

    Classes contained in javax.jms.jar: javax.transaction.xa.XAResource.class javax.jms.BytesMessage.class javax.jms.Message.class javax.jms.JMSException.class javax.jms.Destination.class javax.jms....

    javax.jms.jar下载

    javax.jms.BytesMessage.class javax.jms.Connection.class javax.jms.ConnectionConsumer.class javax.jms.ConnectionFactory.class javax.jms.ConnectionMetaData.class javax.jms.DeliveryMode.class javax.jms....

    javax.persistence.jar

    Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence....

    com.springsource.javax.faces-1.2.0.09.jar

    jar包,官方版本,自测可用

    javax.ejb.jar下载

    Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....

    javax.jar 包免费下载

    javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar ...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    在Java Web开发中,`javax.servlet`包是核心的API之一,它提供了处理HTTP请求和响应的标准接口。这个jar包是Java Servlet规范的一部分,用于...确保正确地引入和使用这些库,能帮助开发者构建功能丰富的Web应用程序。

    com.springsource.javax.faces-1.2.0.08.jar

    jar包,官方版本,自测可用

    javax.ejb.rar

    META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.properties META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.xml javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout....

    javax.servlet.jar下载

    Files contained in javax.servlet.jar: META-INF/MANIFEST.MF javax/servlet/http/LocalStrings.properties javax.servlet.http.HttpSessionBindingListener.class javax.servlet....

    javax.mail-1.4.4.jar

    通过java扩展包javax.mail-1.4.4.jar实现邮件发送功能。 import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart...

    Java Server Faces API 组件标签 API Reference 速查手册

    Java Server Faces API 组件标签 API Reference 速查手册 HTML_BASIC RenderKit javax.faces.Command javax.faces.Button javax.faces.Link javax.faces.Data javax.faces.Table javax.faces.Form javax.faces...

    javax.xml.bind.jar

    【标题】"javax.xml.bind.jar" 是一个Java开发中常用的工具包,主要包含了Java对象到XML数据绑定的API,这是Java标准版(Java SE)的一部分,用于帮助开发者将Java类和XML文档之间的转换自动化,从而简化了XML处理。...

    javax.xml.rpc相关jar包

    在Java编程环境中,XML(eXtensible Markup Language)是一种重要的数据交换格式,广泛用于不同系统之间的通信。而`javax.xml.rpc`是Java平台标准版(Java SE)的一部分,它提供了一组API来支持Web服务的开发。这个...

    javax.el-api.jar/javax.el.jar

    在Java世界中,EL(Expression Language)是一种强大的脚本语言,用于在JSP(JavaServer Pages)和其他Java EE组件中简化数据访问和方法调用。它允许开发者通过简洁的表达式来访问Java对象的属性和调用方法,而无需...

    javax.servlet-api-3.1.0.jar javax.el-api-2.2.4.jar javax.el-2.2.4.jar

    在IT行业中,尤其是在Java Web开发领域,`javax.servlet-api`和`javax.el`库是至关重要的组件。这些库主要用于实现Servlet规范和表达式语言(EL)功能,它们为开发人员提供了与服务器交互以及处理HTTP请求的能力。...

    javax.ws.rs-api-2.0.1-API文档-中文版.zip

    赠送jar包:javax.ws.rs-api-2.0.1.jar; 赠送原API文档:javax.ws.rs-api-2.0.1-javadoc.jar; 赠送源代码:javax.ws.rs-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:javax.ws.rs-api-2.0.1.pom; 包含翻译后...

Global site tag (gtag.js) - Google Analytics