`
aaronluo
  • 浏览: 29550 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JSF -- selectOneMenu 验证错误问题解决

阅读更多

最近一直在使用icefaces,发现select*系统组件在binding一个非字符型的bean属性总是会报“验证错误”的error message。其原因在于JSF的默认实现只针对字符型进行binding。如果想要对任意类型进行binding,就需要自己编写converter了。以Long型为例:

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

import org.apache.commons.lang.math.NumberUtils;

public class LongConvert implements Converter {

	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
			throws ConverterException {
		return NumberUtils.toLong(arg2, 0);
	}

	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2)
			throws ConverterException {
		return arg2.toString();
	}

}

 javax.faces.convert.Converter接口有两个方法需要实现,其中getAsObject()是JSF组件在回写前端数据到后台bean的时候调用,其中第三个参数是一个string类型,我们可以根据这个String类型的值返回一个符合我们业务逻辑的Object,这里我返回了一个Long;getAsString()是JSF组件根据后台binding的bean获取前端可选值的时候调用,第二个参数是一个Object对象,可以按业务逻辑转换为我们需要的String值提供给前端。

 

这个自定义的Converter需要在faces-config.xml中配置才能生效

<converter>
	<converter-id>longConvert</converter-id>
	<converter-class>LongConvert</converter-class>
</converter>

 那么在我们的JSF页面中配置需要的select*组件使用这个converter即可

<ice:selectOneMenu value="#{bean.id}" converter="longConvert">
    <f:selectItems value="#{xxxx}"/>
</ice:selectOneMenu>

 通过自定义的converter,还可以将复杂的业务对象和前端进行binding

分享到:
评论

相关推荐

    jsf的初步使用(包括jsf框架的引入、用户登录、自定义表单验证、valueChangeEvent值变更事件处理做的级联下拉框,内有jsf的jar包)

    本教程将带你深入了解JSF的基础使用,包括框架的引入、用户登录实现、自定义表单验证以及通过`valueChangeEvent`处理级联下拉框。 **一、JSF框架的引入** 在Java EE项目中引入JSF框架,首先需要在`pom.xml`或`build...

    jsf常用控件的使用

    - `h:message`和`h:messages`:显示验证错误信息,有助于用户了解输入问题。 - `f:validateBean`:基于Java Bean Validation进行验证。 6. **显示控件**: - `h:outputText`:用于显示静态文本或Bean中的属性值...

    JSF控件详细说明

    4. **错误处理和验证**:JSF提供了内置验证机制,也可自定义验证规则,处理用户输入的错误。 综上所述,JSF控件是构建JSF应用程序的基础,通过理解它们的分类、属性、事件处理以及生命周期,开发者能够构建出功能...

    jsf例子\监听器 例子

    当组件的值发生改变并经过验证后,JSF会触发值变化事件。在上述代码示例中,`&lt;h:selectOneMenu&gt;`注册了一个值变化监听器`valueChangeListener="#{user.myEvent}"`,当用户选择一个新的国家时,`myEvent`方法会被调用...

    JSF 学生管理系统

    JSF提供内置验证器和自定义验证器,可以使用`f:validateBean`或`f:validator`标签来实现。 7. **导航和页面跳转**: 使用`h:commandLink`或`h:commandButton`,配合`outcome`属性,可以实现页面间的跳转。在学生管理...

    jsf订单界面

    7. **错误处理和反馈**:当验证失败或出现其他错误时,JSF可以显示错误消息,帮助用户理解问题并进行修正。这通常通过`FacesMessage`和`FacesContext`来实现。 在12_7Project中,我们可以预期包含以下文件: - `...

    JSF控件详细参考手册

    ### JSF控件详细参考手册 #### 概述 本文档旨在为BIMP平台开发者提供一个全面且深入的JSF Facelets标签集参考指南。通过详细介绍这些标签的用途与用法,帮助开发者更好地掌握和利用这些工具来提高Web应用的质量与...

    jsf生命周期和一部分标签介绍

    - `&lt;h:message&gt;`/`&lt;h:messages&gt;`:显示验证错误信息。 每个组件都有对应的属性,如`value`、`required`、`validator`等,可以控制其行为和样式。通过自定义组件和标签库,JSF可以满足复杂的应用场景需求。 虽然...

    《JSF标签》简体中文版

    ### JSF标签详解 #### 1. 标签入门 ##### 1.1 简介:JSF标准标签 JavaServer Faces (JSF) 是一个用于构建企业级Web应用程序的框架,它提供了丰富的标签库,使开发人员能够更轻松地创建动态网页。JSF的标签库基于...

    jsf常用标签整理

    6. 标签用于显示验证错误或信息消息,例如:(全局消息)或(仅显示信息类型的消息)。 7. 标签、、等用于创建输入字段。其中,`&lt;h:inputText&gt;`用于文本输入,`&lt;h:inputSecret&gt;`用于密码输入,`&lt;h:inputTextarea&gt;`用于...

    JSF标签详解.docx

    - **其它标签**:包括`&lt;h:form&gt;`定义表单,`&lt;h:message&gt;`和`&lt;h:messages&gt;`显示验证错误,以及`&lt;h:graphicImage&gt;`显示图片等。 3. 表格处理 JSF也支持创建复杂的表格布局。例如: - **简单的表格**:`&lt;h:dataTable&gt;`...

    JSF_Tomcat_Netbeans_reg_demo

    4. **错误和消息处理**:如果验证失败,JSF可以通过FacesMessage将错误信息反馈给用户。成功注册后,可以显示欢迎消息或重定向到其他页面。 5. **部署到Tomcat**:在NetBeans中,可以方便地将Web应用打包成WAR文件...

    JSF标准标签

    通过上述内容可以看出,JSF提供了一系列丰富的标准标签,这些标签不仅涵盖了常见的Web UI元素,而且集成了强大的功能,比如数据绑定、验证和转换等。对于Web开发人员来说,掌握这些标签的使用方法将极大地提高开发...

    java server face 教程

    - **异常处理**:介绍如何在JSF中处理数据验证失败时产生的错误消息。 - **用户反馈**:强调提供清晰友好的错误提示信息对于提升用户体验的重要性。 **自订转换, 验证标签** - **标签开发**:讲解如何创建自定义的...

Global site tag (gtag.js) - Google Analytics