`

JSF Validation Error: Value is not valid错误

    博客分类:
  • JSF
阅读更多

问题提出:

平台:Richfaces,Jsf,Spring,Ejb3.0

  • 页面文件:
<h:selectOneListbox size="1"

	value="#{coalDailyBackBean.currentEntity.coalDaily.coalTS}" converter="com.mycompany.CoalTransportStyleConverter">

	<f:selectItems value="#{coalDailyBackBean.allTSs}">

	</f:selectItems>

</h:selectOneListbox>

    coalTS是一个CoalTransportStyle的对象

    allTSs是一个CoalTransportStyle的List

 

  •  JSF配置文件faces-config.xml:
<converter>

	<converter-id>

		com.mycompany.CoalTransportStyleConverter

	</converter-id>

	<converter-class>		com.mycompany

.parameter.plantinfo.web.converter.CoalTransportStyleConverter

	</converter-class>

</converter>

    CoalTransportStyle.java

@Entity

@Table(name = "T_CoalTransportStyle")

public class CoalTransportStyle implements Serializable {



	/**

	 * 

	 */

	private static final long serialVersionUID = -5090574246490412429L;

	private Long id;	

	private String paraName;

	@Id

	@GeneratedValue(strategy=GenerationType.AUTO)

	public Long getId() {

		return id;

	}

	public void setId(Long id) {

		this.id = id;

	}

	@Column(unique=true,nullable=false)

	public String getParaName() {

		return paraName;

	}

	public void setParaName(String paraName) {

		this.paraName = paraName;

	}

}
 
public class CoalTransportStyleConverter implements Converter {

	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {

		CoalTransportStyle style = new CoalTransportStyle();

		String strs[] = arg2.split(":");

		style.setId(new Long(strs[0]));

		style.setParaName(strs[1]);

		return style;

	}



	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {

		CoalTransportStyle style = (CoalTransportStyle) arg2;

		return style.getId() + ":" + style.getParaName();

	}

}

 

   定义了一个converter

  • 后台支撑Bean:
    /**
    
     * 获得所有的运输方式
    
     * 
    
     * @return the allTSs
    
     */
    
    public List<SelectItem> getAllTSs() {
    
    	allTSs = new ArrayList<SelectItem>();
    
    	List<CoalTransportStyle> list = coalTransportStyleService.queryAll(
    
    			"paraName", true);
    
    	for (CoalTransportStyle style : list) {
    
    		allTSs.add(new SelectItem(style, style.getParaName()));
    
    	}
    
    	return allTSs;
    
    }
     
    /**
    
     * @return the currentEntity
    
     */
    
    public CoalDailyEntity getCurrentEntity() {
    
    	if (getCoalDailyId() != null) {
    
    		currentEntity = new CoalDailyEntity();
    
    		currentEntity.setPlant(plant);
    
    		currentEntity.setT_Date(date);// 设置时间
    
    		currentEntity.setCoalDaily(coal);
    
    	}
    
    	return currentEntity;
    
    }
     初始页面显示时,h:selectOneListbox显示没有问题,但是当数据提交时,就报了一个错:Validation Error: Value is not valid 上网找了半天也没找到答案,后来自己调试了一下。
  • 当数据提交时,是调用了CoalTransportStyleConverter的getAsObject说明这个对象已经创建起来了。但是为什么还报这个错误呢?
  • 于是我找了Messages_en.properties错误信息文件。
    javax.faces.component.UISelectOne.INVALID={0}: Validation Error: Value is not valid
  • 又找到UISelectOne的validateValue方法。
    protected void validateValue(FacesContext context, Object value) {
    
    
    
            // Skip validation if it is not necessary
    
            super.validateValue(context, value);
    
    
    
            if (!isValid() || (value == null)) {
    
                return;
    
            }
    
    
    
            // Ensure that the value matches one of the available options
    
            boolean found = matchValue(value, new SelectItemsIterator(this));
    
    
    
            // Enqueue an error message if an invalid value was specified
    
            if (!found) {
    
                FacesMessage message =
    
                    MessageFactory.getMessage(context, INVALID_MESSAGE_ID,
    
                         MessageFactory.getLabel(context, this));
    
                context.addMessage(getClientId(context), message);
    
                setValid(false);
    
            }
    
        }
    
    
    
    
    
        // --------------------------------------------------------- Private Methods
    
    
    
    
    
        /**
    
         * <p>Return <code>true</code> if the specified value matches one of the
    
         * available options, performing a recursive search if if a
    
         * {@link SelectItemGroup} instance is detected.</p>
    
         *
    
         * @param value {@link UIComponent} value to be tested
    
         * @param items Iterator over the {@link SelectItem}s to be checked
    
         */
    
        private boolean matchValue(Object value, Iterator items) {
    
    
    
            while (items.hasNext()) {
    
                SelectItem item = (SelectItem) items.next();
    
                if (item instanceof SelectItemGroup) {
    
                    SelectItem subitems[] =
    
                        ((SelectItemGroup) item).getSelectItems();
    
                    if ((subitems != null) && (subitems.length > 0)) {
    
                        if (matchValue(value, new ArrayIterator(subitems))) {
    
                            return (true);
    
                        }
    
                    }
    
                } else {
    
                    //Coerce the item value type before comparing values.
    
                    Class type = value.getClass();
    
                    Object newValue;
    
                    try {
    
                        newValue = getFacesContext().getApplication().
    
                            getExpressionFactory().coerceToType(item.getValue(), type);
    
                    } catch (ELException ele) {
    
                        newValue = item.getValue();
    
                    } catch (IllegalArgumentException iae) {
    
                        // If coerceToType fails, per the docs it should throw
    
                        // an ELException, however, GF 9.0 and 9.0u1 will throw
    
                        // an IllegalArgumentException instead (see GF issue 1527).                    
    
                        newValue = item.getValue();
    
                    }
    
                    if (value.equals
    (newValue)) {
    
                        return (true);
    
                    }
    
                }
    
            }
    
            return (false);
    
    
    
        }
     这里调用了equals方法,结果是不行,所以抛出了这个异常。
  • 重写CoalTransportStype的equals方法即可:
    @Entity
    
    @Table(name = "T_CoalTransportStyle")
    
    public class CoalTransportStyle implements Serializable {
    
    
    
    	/**
    
    	 * 
    
    	 */
    
    	private static final long serialVersionUID = -5090574246490412429L;
    
    	private Long id;	
    
    	private String paraName;
    
    	@Id
    
    	@GeneratedValue(strategy=GenerationType.AUTO)
    
    	public Long getId() {
    
    		return id;
    
    	}
    
    	public void setId(Long id) {
    
    		this.id = id;
    
    	}
    
    	@Column(unique=true,nullable=false)
    
    	public String getParaName() {
    
    		return paraName;
    
    	}
    
    	public void setParaName(String paraName) {
    
    		this.paraName = paraName;
    
    	}
    
    	
    
    	public boolean equals(Object obj) {
    
    		if (this == obj)
    
    			return true;
    
    		if (obj == null)
    
    			return false;
    
    		if (getClass() != obj.getClass())
    
    			return false;
    
    		final CoalTransportStyle other = (CoalTransportStyle) obj;
    
    		if (id == null) {
    
    			if (other.id != null)
    
    				return false;
    
    		} else if (!id.equals(other.id))
    
    			return false;
    
    		if (paraName == null) {
    
    			if (other.paraName != null)
    
    				return false;
    
    		} else if (!paraName.equals(other.paraName))
    
    			return false;
    
    		return true;
    
    	}
    
    }
     
分享到:
评论
1 楼 ymw2000 2009-02-17  

相关推荐

    jsf-validation.zip_JSF_jsf validation_zip

    2. **验证规则注解(Validation Rules Annotations)**:JSF支持JSR 303/349 Bean Validation,允许我们在模型类的属性上使用注解来定义验证规则,例如`@NotNull`, `@Size`, `@Pattern`等。 3. ** faces-config.xml...

    JSF2.0实战 - 7、自定义<h:head>

    在JSF(JavaServer Faces)2.0中,自定义`&lt;h:head&gt;`标签是一项重要的功能,它允许开发者对页面头部区域进行精细化控制,包括引入CSS样式表、JavaScript脚本和其他元信息。这一特性极大地提高了应用的灵活性和可维护...

    JSF-UIREPEAT

    **JSF(JavaServer Faces)** 是一个Java平台上的Web应用程序框架,用于构建用户界面。它简化了开发人员创建交互式、数据驱动的Web应用程序的过程。JSF提供了一种组件模型,允许开发者通过声明性方式来构建用户界面...

    JSF-1_1-API.chm

    JSF-1_1-API.chm

    JSF开发包:commons-beanutils.jar+commons-collections.jar+commons-digester.jar+jsf-api.jar+jsf-impl.jar+jstl.jar+standard.jar

    JSF开发所必需包:花了很长时间才收集好,很费时,现已收集好,何不分享给大家,让大家节省时间做点有意义的事情呢?呵呵。。。已在附件供大家下载,若是你所需要的东西,那就请投个票、说句鼓励的话,我就满足了。 ...

    jsf primefaces datatable

    **JSF PrimeFaces DataTable 深入解析** PrimeFaces 是一个流行且功能丰富的JavaServer Faces (JSF)组件库,提供了许多用户界面组件,其中包括`DataTable`。在JSF应用中,`DataTable`是一个非常重要的组件,用于...

    jsf配置myfaces各种jar

    本人用的是Myeclipse7.0+J2EE5.0+JSF开发,配置myfaces各种jar,包括上传.考到lib下就可以.哪里不明加我QQ问我 200808006

    maven包jsf

    **Maven包JSF详解** JSF(JavaServer Faces)是Java平台上的一个用于构建用户界面的组件模型框架。它提供了用于开发Web应用程序的UI组件、事件处理和数据绑定机制。Maven则是一个项目管理工具,它可以帮助Java...

    jsf-primefaces:JSF Primefaces教程

    **JSF Primefaces 教程概述** JSF (JavaServer Faces) 是一个用于构建Web应用程序的Java框架,它简化了用户界面组件的开发和管理。而Primefaces是JSF的一个热门扩展库,提供了丰富的UI组件和强大的功能,使得开发者...

    JSF学习,JSF标签使用

    JSF的学习入门知识教程,里面有例子还有各个标签的使用及属性介绍

    JSF 很全面的帮助文档

    最新的JSF版本(如JSF 3.0)引入了更多新特性,如响应式设计支持、改进的错误处理和增强的类型安全EL。 总结来说,这份“JSF很全面的帮助文档”将引导开发者深入理解JSF框架的各个方面,从基础概念到高级特性,包括...

    JSF2.0:Validating User Input

    ### JSF 2.0 用户输入验证详解 #### 概述 JSF(JavaServer Faces)2.0作为Java EE平台的一部分,在Web应用程序开发中扮演着重要的角色。它提供了丰富的功能来简化用户界面的设计和实现过程。其中一项关键功能就是对...

    JSF实战教程中文版.docx

    "JSF实战教程中文版" 本教程主要讲解JavaServer Faces(JSF)技术的实战应用,包括JSF的基础知识、核心概念、实践经验等。下面是从给定的文件中生成的相关知识点: 一、JSF概述 * JSF是什么?:JSF是一种基于Java...

    JSF页面,<p:fileUpload组件文件上传

    在JavaServer Faces (JSF)框架中,PrimeFaces是一个非常流行的UI组件库,它提供了许多增强用户界面的功能。其中,`&lt;p:fileUpload&gt;`组件是用于实现文件上传功能的一个重要元素。本篇文章将深入探讨如何使用PrimeFaces...

    gatling-jsf-demo:JSF Gatling 示例

    目录 此示例应用程序仅展示了如何通过针对执行 JSF 请求。 运行它 mvn gatling:execute ... val jsfViewStateCheck = css( " input[name='javax.faces.ViewState'] " , " value " ) .saveAs( " viewState " )

    Windows 下整合 weblogic10 jsf1.2 hibernate3

    1. **The function XXX must be used with a prefix when a default namespace is not specified** - **异常解释**:此异常提示表示在 XML 文件(通常是 JSF 页面或配置文件)中使用了未指定前缀的函数或方法调用...

    jsf,radiobutton分组示例

    在JavaScript Server Faces (JSF) 中,`radiobutton`组件是用于创建单选按钮的,它们通常用于在一组互斥选项中让用户选择一个。在这个"jsf,radiobutton分组示例"中,我们将深入探讨如何在JSF应用中有效地使用`&lt;h:...

    matlab集成c代码-ace-jsf-component:JSF组件,可将Acev1.4.2编辑器用于JSF应用程序

    JSF组件,允许对JSF应用程序使用v1.4.2编辑器。 特征 开箱即用的支持162种模式 开箱即用,支持38种模式 emacs和vim的按键绑定 将Ace会话保留到JSF支持bean: 代码折叠 滚动 设定选项 支持 用法 在facelets页面中,...

    JSF课件 jsf介绍

    ### JSF介绍与技术概述 #### 一、JSF概览 JSF(JavaServer Faces)是一种基于Java的标准Web应用程序框架,它为开发者提供了一种简单的方式来构建动态且交互式的Web应用。本节将深入探讨JSF的核心概念、特点以及与...

Global site tag (gtag.js) - Google Analytics