最近一直在使用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的基础使用,包括框架的引入、用户登录实现、自定义表单验证以及通过`valueChangeEvent`处理级联下拉框。 **一、JSF框架的引入** 在Java EE项目中引入JSF框架,首先需要在`pom.xml`或`build...
- `h:message`和`h:messages`:显示验证错误信息,有助于用户了解输入问题。 - `f:validateBean`:基于Java Bean Validation进行验证。 6. **显示控件**: - `h:outputText`:用于显示静态文本或Bean中的属性值...
4. **错误处理和验证**:JSF提供了内置验证机制,也可自定义验证规则,处理用户输入的错误。 综上所述,JSF控件是构建JSF应用程序的基础,通过理解它们的分类、属性、事件处理以及生命周期,开发者能够构建出功能...
当组件的值发生改变并经过验证后,JSF会触发值变化事件。在上述代码示例中,`<h:selectOneMenu>`注册了一个值变化监听器`valueChangeListener="#{user.myEvent}"`,当用户选择一个新的国家时,`myEvent`方法会被调用...
JSF提供内置验证器和自定义验证器,可以使用`f:validateBean`或`f:validator`标签来实现。 7. **导航和页面跳转**: 使用`h:commandLink`或`h:commandButton`,配合`outcome`属性,可以实现页面间的跳转。在学生管理...
7. **错误处理和反馈**:当验证失败或出现其他错误时,JSF可以显示错误消息,帮助用户理解问题并进行修正。这通常通过`FacesMessage`和`FacesContext`来实现。 在12_7Project中,我们可以预期包含以下文件: - `...
- `<h:message>`/`<h:messages>`:显示验证错误信息。 每个组件都有对应的属性,如`value`、`required`、`validator`等,可以控制其行为和样式。通过自定义组件和标签库,JSF可以满足复杂的应用场景需求。 虽然...
### JSF标签详解 #### 1. 标签入门 ##### 1.1 简介:JSF标准标签 JavaServer Faces (JSF) 是一个用于构建企业级Web应用程序的框架,它提供了丰富的标签库,使开发人员能够更轻松地创建动态网页。JSF的标签库基于...
6. 标签用于显示验证错误或信息消息,例如:(全局消息)或(仅显示信息类型的消息)。 7. 标签、、等用于创建输入字段。其中,`<h:inputText>`用于文本输入,`<h:inputSecret>`用于密码输入,`<h:inputTextarea>`用于...
- **其它标签**:包括`<h:form>`定义表单,`<h:message>`和`<h:messages>`显示验证错误,以及`<h:graphicImage>`显示图片等。 3. 表格处理 JSF也支持创建复杂的表格布局。例如: - **简单的表格**:`<h:dataTable>`...
4. **错误和消息处理**:如果验证失败,JSF可以通过FacesMessage将错误信息反馈给用户。成功注册后,可以显示欢迎消息或重定向到其他页面。 5. **部署到Tomcat**:在NetBeans中,可以方便地将Web应用打包成WAR文件...
通过上述内容可以看出,JSF提供了一系列丰富的标准标签,这些标签不仅涵盖了常见的Web UI元素,而且集成了强大的功能,比如数据绑定、验证和转换等。对于Web开发人员来说,掌握这些标签的使用方法将极大地提高开发...
- **异常处理**:介绍如何在JSF中处理数据验证失败时产生的错误消息。 - **用户反馈**:强调提供清晰友好的错误提示信息对于提升用户体验的重要性。 **自订转换, 验证标签** - **标签开发**:讲解如何创建自定义的...