您的位置:首页 > Web前端 > JavaScript

JSF--转换器的使用和自定义

2013-10-14 10:07 330 查看
1 简介:

1.1 在JSF应用中,服务器端的数据对象是有类型的,用户界面组件内的内容全部都是String类型。当服务器端和用户端进行交互时,就要进行数据类型转换,这发生在JSF生命周期的应用请求值阶段和呈现响应阶段。

1.2 在应用请求值阶段,客户端提交的参数数据更新到服务器端组件树中对应的每一个组件的提交值中,在处理验证阶段发生之前,JSF应用会先将每一个组件的提交值通过调用注册到改组件的转换器或默认转换器进行成组件的本地值。

1.3 在呈现响应阶段,JSF应用为了把整个响应呈现给客户端,又一次逐级对每个组件调用encode方法(解码),把组件转换成字符串,同时把组件呈现为适合于特定客户端的组件标签。

2 JSF中标准转换器的使用

2 .1 JSF框架提供了针对所有Java基本类型的标准转换器,用这些标准转换器就可以实现Java基本类型和字符串类型之间的相互转换。这些标准转换器的实现类在javax.faces.convert包下。在标准转换器中,基本类型的数据在转换时都会自动调用对应的标准转换器,无须人为干预,而对于Date对象和提供更加精细化的数字格式化,可以使用DateTime转换器和Number转换器。

2.2 由于日期时间的显示跟用户的语言区域以及用户习惯都有关系,所及JSF应用对于日期时间的转换就不是自动进行,而是提供专门的<f:convertDateTime>标签供程序员定制使用DateTime转换器。

具体用法:http://www.jsftoolbox.com/documentation/help/12-TagReference/core/f_convertDateTime.html

2.3对于像数字、货币、百分数这类数据,它跟用户所在的语言区域和习惯也有关系,所以JSF也提供了<f:convertNumber>标签来定制Number转换器。

具体用法:http://www.jsftoolbox.com/documentation/help/12-TagReference/core/f_convertNumber.html

3 自定义转换器

对于特殊需要的转换,可以自定义转换器。

3.1 定义一个类,实现 javax.faces.convert.Converter接口

JSF规范中定义了一个javax.faces.convert.Converter接口,通过实现此接口就可以完成字符串数据与对象数据之间的相互转换,完成转换器的功能。在这个类中声明了两个方法。

(1)public Object getAsObject(FacesContext context,UIComponent component,String newValue)

这个方法主要负责把客户端提交来的字符串内容转换为自定义的对象类型,此方法运行在验证请求阶段。

(2)public String getAsString(FacesContext context,UIComjponent component,Object value)

这个方法主要负责从指定的托管bean中得到属性的值,并将其转换为字符串。此方法运行在呈现响应阶段。

3.2 在Faces上下文中注册自定义转换器

写好Converter接口的实现类之后,要通过Faces上下文来注册这个自定义转换器。在faces-config.xml文件中添加如下代码片段进行注册,

<converter>
<converter-id>(实现Converter接口的类的Id)</converter-id>
<converter-class>(实现Converter接口的类的全路径名)</converter-class>
</converter>

3.3 用<f:converter/>标签在页面中使用自定义转换器

在JSF页面中,可以使用<f:converter/>这个标签来给指定的用户界面组件注册自定义转换器,程序实现实例代码如下:

<h:inputText value="EL表达式">
<f:converter converterId="(在上下文中注册转换器时定义的Id)"/>
</h:inputText>


通过以上步骤几个步骤,就实现了一个自定义转化器并使用它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: