`

jsf-自定义转换器

    博客分类:
  • jsf
阅读更多
在jsf中,除了使用标准的转换器<f:convertDateTime>来转换日期和<f:convertNumber>来转换数值之外,还可以通过实现javax.faces.convert.Converter接口来自定义转换器.

javax.faces.convert.Converter接口中有两个方法:
public Object getAsObject(FacesContext context,
UIComponent component,
String str);
public String getAsString(FacesContext context,
UIComponent component,
Object obj);

简单的说,通过第一个方法可以将接收自客户端经由HTTP传来的字符串数据转换为自定义对象,这个自定义对象将会自动设定给您指定的Bean对象;通过第二个方法可以将从Bean对象得到的对象转换为字符串,如此才能藉由HTTP传回给客户端.
例:
• User.java
package onlyfun.caterpillar;
public class User {
private String firstName;
private String lastName;
public String getFirstName() 
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}

这个User类是我们转换器的目标对象
还有一个GuestBean类:
• GuestBean.java
package onlyfun.caterpillar;
public class GuestBean {
private User user;
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}

这个Bean上的属性直接传回或接受User类型的参数,我们来实现一个简单的转换器,为HTTP字符串与User对象进行转换:
• UserConverter.java
package onlyfun.caterpillar;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
public class UserConverter implements Converter {
public Object getAsObject(FacesContext context,
UIComponent component,
String str)
throws ConverterException {
String[] strs = str.split(",");
User user = new User();
try {
user.setFirstName(strs[0]);
user.setLastName(strs[1]);
}
catch(Exception e) {
// 转换错误,简单的丢出例外
throw new ConverterException();
}
return user;
}
public String getAsString(FacesContext context,
UIComponent component,
Object obj)
throws ConverterException {
String firstName = ((User) obj).getFirstName();
String lastName = ((User) obj).getLastName();
return firstName + "," + lastName;
}
}

然后在faces-config.xml中完成注册:
• faces-config.xml
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<navigation-rule>
<from-view-id>/*</from-view-id>
<navigation-case>
<from-outcome>show</from-outcome> <to-view-id>/pages/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<converter>
<converter-id>onlyfun.caterpillar.User</converter-id>
<converter-class>
onlyfun.caterpillar.UserConverter
</converter-class>
</converter>
<managed-bean>
<managed-bean-name>guest</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.GuestBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>

注意:注册转换器时,需提供转换器标识(Converter ID)与转换器类.
接下来要在JSF页面中使用转换器:
这里我们介绍三种使用方法:
• 方法一 通过标签属性
• index.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html;charset=GB2312"%>
<f:view>
<html>
<head>
<title>自定义转换器</title>
</head>
<body>
Guest名称是:<b>
<h:outputText value="#{guest.user}"
converter="onlyfun.caterpillar.User"/>
</b>
<h:form>
[color=red]<h:inputText id="userField"
value="#{guest.user}"
converter="onlyfun.caterpillar.User"/>[/color] 
<h:message for="userField" style="color:red"/>
<br>
<h:commandButton value="送出" action="show"/>
</h:form>
</body>
</html>
</f:view>

• 方法二 通过<f:converter>标签并使用converterId属性来指定转换器
<h:inputText id="userField" value="#{guest.user}">
<f:converter converterId="onlyfun.caterpillar.User"/>
</h:inputText>

• 方法三 不用注册,直接在Bean上提供一个取得转换器的方法
• GuestBean.java
package onlyfun.caterpillar;
import javax.faces.convert.Converter;
public class GuestBean {
private User user;
private Converter converter = new UserConverter();
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
public Converter getConverter() {
return converter;
}
}

之后可以直接结合 JSF Expression Language 来指定转换器:
<h:inputText id="userField"
value="#{guest.user}"
converter="#{guest.converter}"/>
1
1
分享到:
评论

相关推荐

    JSF自定义转换器验证器实例

    总的来说,JSF的自定义转换器和验证器允许开发者根据项目需求定制数据处理和验证逻辑,提高了代码的可重用性和灵活性。在实际开发中,你可能会遇到更复杂的转换和验证需求,例如处理多语言、处理自定义对象等。通过...

    jsf-api-2.0.3.jar.zip_jsf api_jsf jar包_jsf-api-2.0.3.jar_jsf-api

    开发者可以引用这些接口来创建自定义组件,实现事件监听器,以及进行数据绑定和验证。 在实际开发中,为了确保项目顺利运行,开发者需要将`jsf-api-2.0.3.jar` 和其他必要的JSF库添加到项目的`WEB-INF/lib`目录下,...

    jsf相关jar包 jsf-api.jar jsf-impl.jar

    这些接口定义了JSF的组件、事件、转换器、验证器等核心功能。通过这个API,开发者可以创建自定义的JSF组件,处理用户事件,以及实现数据的转换和验证。此外,它还包含JSF生命周期和渲染树的概念,使得开发者能理解...

    JSF-Java-jar包

    - 一些内建的转换器和验证器,用于数据验证和格式化。 - `Lifecycle`接口的实现,定义了JSF的六阶段生命周期:恢复视图、应用请求值、处理验证、更新模型值、调用应用事件和渲染响应。 3. **JSF工作原理**: 当...

    mojarra_web项目需要的包_jsf-impl.jar_

    开发者通过导入这个库,可以使用JSF提供的各种接口和类来实现页面组件、监听器和转换器等功能。例如,`javax.faces.component.UIComponent` 类代表一个可渲染的UI组件,而`javax.faces.event.ActionEvent` 则表示一...

    ajax4jsf-1.1.1.jar.zip

    此外,需要在web.xml配置文件中进行必要的设置,以启用Ajax4JSF的过滤器和监听器。 **总结** Ajax4JSF 1.1.1是一个强大的工具,可以帮助开发者构建具有丰富用户体验的JSF应用程序。它提供了Ajax功能,使得Web应用...

    jsf-api-src.zip

    JavaScript Server Faces(JSF)是Java平台上用于构建用户界面的模型-视图-控制器(MVC)框架。JSF API提供了丰富的组件库和事件处理机制,使得开发人员能够轻松创建Web应用程序。`jsf-api-src.zip`是一个压缩包,...

    ajax4jsf-demo

    - **配置应用**:在web.xml中配置Ajax4JSF的过滤器和监听器,以启用Ajax功能。 - **测试和调试**:运行应用,通过浏览器查看和测试Ajax效果,进行必要的调整和优化。 **6. 高级特性** Ajax4JSF还支持自定义组件和...

    jsf-demo练兵

    在JSF项目中,你会找到表示层(Faces Beans)、控制层(Managed Beans)以及任何自定义的Java组件。 4. **bin**:这个目录通常存放编译后的Java类文件和其他资源文件。在构建过程中,`src`目录中的源码会被编译并...

    JSF编程WEB-INF下lib内所用到的jar包集成

    `dataprovider.jar`可能用于处理数据的获取和展示,而`jsfcl.jar`可能是JSF自定义组件库的一部分,扩展了JSF的组件功能。 5. **sqlx.jar**: 这个JAR包可能包含了SQL相关的工具或者驱动,用于数据库操作。在JSF...

    JSF-2-Hello-World-Example.zip

    8. **Conversion and Validation**:JSF提供了一套内置的转换器和验证器,用于确保输入数据的正确性。 9. **Composite Components**:允许开发者创建自定义组件,复用和组合现有的JSF组件。 在这个"JSF-2-Hello-...

    第7章 JSF转换器和验证器与实例程序

    在JSF中,可以自定义转换器,通过实现`javax.faces.convert.Converter`接口,或者使用`@FacesConverter`注解来标记一个类为转换器。 描述中提到的"convertTest"可能是一个示例项目或测试用例,用于演示如何创建和...

    JSF2.0实战 - 4、自定义组件

    渲染器负责将组件转换为浏览器可以理解的标记。在JSF中,渲染器类需要实现`javax.faces.render.Renderer`接口。例如,一个自定义组件的渲染器可能如下: ```java public class MyCustomComponentRenderer extends...

    jsf-1.2_07-b03-FCS.rar

    JavaScript Framework (JSF) 是Java平台上的一种用于构建Web应用程序的模型-视图-控制器(MVC)框架。JSF 1.2是该框架的一个重要版本,它在JSF 1.1的基础上进行了多方面的改进和增强,为开发者提供了更强大、更灵活...

    JSF(转换器+验证器)

    3. 自定义转换器可以通过实现`javax.faces.convert.Converter`接口或使用`@FacesConverter`注解来创建。 4. `getAsString()`方法用于将模型对象转换为字符串,而`getAsObject()`方法则将用户输入的字符串转换回模型...

    JSF 转换器视频

    在"Jsf第六章.wrf"这个视频文件中,讲师很可能会演示如何在Myeclipse中创建一个简单的JSF项目,设置好环境后,他会逐步解释转换器的概念,编写一个自定义转换器的示例,展示如何注册和使用这个转换器,最后通过实际...

    JSF-Demo.rar_DEMO_jsf demo down load

    5. **转换和验证**:JSF支持自定义数据验证,如通过`@Validator`注解创建验证器类,或者在UI组件上使用`required`属性、`javax.faces.validator.LengthValidator`等内置验证器。 6. **事件处理**:JSF中的事件处理...

    jsf自定义组件的实现

    【JSF自定义组件实现详解】 在JavaServer Faces (JSF)框架中,自定义组件允许开发者根据项目需求创建具有特定功能的UI元素。本文将引导你逐步了解如何在JSF中实现一个自定义组件,从基础开始,一步步构建一个简单的...

    JSF-API(CHM)

    JSF 1.2 API文件包含了该版本的所有核心组件、监听器、事件处理和管理对象的详细说明,对于学习和使用JSF 1.2的开发者来说是非常宝贵的参考资料。 在JSF中,**组件模型** 是其核心组成部分。组件是JSF界面的基本...

Global site tag (gtag.js) - Google Analytics