Just some sharing about java open source and life

JSF Converter

日期:2010-05-01 14:48 | 作者:JavaChen | 分类目录:JSF
92 views

Web应用程序与浏览器之间是使用HTTP进行沟通,所有传送的数据基本上都是字符串文字,而Java应用程序本身基本上则是对象,所以对象数据必须经由转换传送给浏览器,而浏览器送来的数据也必须转换为对象才能使用。转换器(Converter)协助模型与视图之间的数据转换.

JSF定义了一系列标准的转换器(Converter),对于基本数据型态(primitive type)或是其Wrapper类别,JSF会使用javax.faces.Boolean、javax.faces.Byte、 javax.faces.Character、javax.faces.Double、javax.faces.Float、 javax.faces.Integer、javax.faces.Long、javax.faces.Short等自动进行转换,对于 BigDecimal、BigInteger,则会使用javax.faces.BigDecimal、javax.faces.BigInteger自动进行转换。

至于DateTime、Number,我们可以使用、标签进行转换,它们各自提供有一些简单的属性,可以让我们在转换时指定一些转换的格式细节。

在页面上输入一个日期,转换器自动依pattern设定的样式将Date对象格式化了,当您依格式输入数据并送出后,转换器也会自动将您输入的数据转换为Date对象,如果转换时发生错误,则会出现不能装换的错误提示。

除了使用JSF的标准转换器,我们还可以自定义转换器,您可以实现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传回给客户端。

一个实例,省去了一些java代码类,主要是配置文件说明使用方法。

注册转换器时,需提供转换器识别(Converter ID)与转换器类别,接下来要在JSF页面中使用转换器的话,就是指定所要使用的转换器识别。转换器识别(Converter ID)与转换器类别分别对应一个java的类。

< %@ 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=utf-8"%>

<f :view><html><head><title></title></head><body>

Guest名称是:<b> <h :o utputText value="#{guest.user}"converter="com.javachen.converter.User" /> </b>

<h:form>
<h :inputText id="userField" value="#{guest.user}"converter="#{guest.converter}"></h>
<h:message for="userField" style="color:red" /><br />
<h:inputText id="dateField" value="#{guest.date}">
     <f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
<h:message for="dateField" style="color:red" /><br />
<h:commandButton value="送出" action="show" />
</h:form>
</body>
</html>
</f:view>

看上面的例子,可以知道可以在JSF的标签内定义converter=”com.javachen.converter.User”,指明使用我们定义的那个转换器:

<h:outputText value="#{guest.user}"  converter="onlyfun.caterpillar.User"/>

<f:converter>卷标并使用converterId属性来指定转换器:

<h:inputText id="userField" value="#{guest.user}"><f:converter converterId="onlyfun.caterpillar.User"/></h:inputText>

除了向JSF注册转换器之外,还有一个方式可以不用注册,就是直接在Bean上提供一个取得转换器的方法,即将转换器作为一个javabean的属性使用,直接用EL表达式获取该转换器。

作者:JavaChen | 分类目录:JSF | 标签:
回到顶部

无觅相关文章插件,快速提升流量