JSF Converter介绍与使用

来源:互联网 发布:ubuntu提取dsdt办法 编辑:程序博客网 时间:2024/06/07 11:56

转自:http://xiejibin.blog.163.com/blog/static/538770992008816359667/

JSF提供Converter机制对用户输入,以及画面输出值进行变换。
JSF提供了一些默认的Converter实现,同时也提供了接口可以让用户实现自定义Converter。本文对JSF的Converter的原理机制,功能,实现方法等做一个介绍

1,输入变换:在用户1,输入变换:在用户提交时对用户输入值进行变换
       2,输出变换:在画面显示前对显示值进行变换

在JSF的几个生命周期阶段,分别会在以下几个阶段调用组件的Converter:
1,对于UIInput组件:如果按钮事件的immediate属性为true(<h:commandButton immediate="true" .../>),JSF会在 [Apply Request Values Phase:应用请求值阶段],反之,JSF会在[Process Validations Phase:数据检查阶段] 检验用户输入的有效性,有效的情况下会调用绑定到该UIInput组件的Converter对用户输入进行转换。同时,跟UIOutput组件一样,JSF会在[Render Response:重画画面阶段]调用Converter对UIInput进行显示前的变换处理
2,对于UIOutput组件:JSF会在[Render Response:重画画面阶段]调用绑定到该UIOutput组件的Converter对将要显示的值进行变换。

TypeClassNameFor conversion between...BigDecimal

BigDecimalConverter

javax.faces.BigDecimal

String and

java.math.BigDecimal

values

BigInteger

BigIntegerConverter

javax.faces.BigInteger

String and

java.math.BigInteger

values

Boolean and boolean

BooleanConverter

javax.faces.Boolean

String and

java.lang.Boolean

(and boolean primitive) values

Byte and byte

ByteConverter

javax.faces.Byte

String and

java.lang.Number

values

Character and char

CharacterConverter

javax.faces.Character

String and

java.lang.Character

(and char primitive) values

Double and double

DoubleConverter

javax.faces.Double

String and

java.lang.Double

(and double primitive) values

Float and float

FloatConverter

javax.faces.Float

String and

java.lang.Float

(and float primitive) values

Integer and int

IntegerConverter

javax.faces.Integer

String and

java.lang.Integer

(and int primitive) values

Long and long

LongConverter

javax.faces.Long

String and

java.lang.Long

(and long primitive) values

Short and short

ShortConverter

javax.faces.Short

String and

java.lang.Short

(and short primitive) values

JSF跟Converter有关的标签:
<h:inputHidden converter=""></h:inputHidden>
<h:inputSecret converter=""></h:inputSecret>
<h:inputText converter=""></h:inputText>
<h:inputTextarea converter=""></h:inputTextarea>
<h:outputFormat converter=""></h:outputFormat>
<h:outputLabel converter=""></h:outputLabel>
<h:outputLink converter=""></h:outputLink>
<h:outputText converter=""></h:outputText>
<h:selectBooleanCheckbox converter=""></h:selectBooleanCheckbox>
<h:selectManyCheckbox converter=""></h:selectManyCheckbox>
<h:selectManyListbox converter=""></h:selectManyListbox>
<h:selectManyMenu converter=""></h:selectManyMenu>
<h:selectOneListbox converter=""></h:selectOneListbox>
<h:selectOneMenu converter=""></h:selectOneMenu>
<h:selectOneRadio converter=""></h:selectOneRadio>
<f:converter converterId=""></f:converter>
<f:convertDateTime></f:convertDateTime>
<f:convertNumber></f:convertNumber>

其中h:inputHidden等标签的converter属性以及f:converter标签的converterId属性为被定义的converter-id,或指定为javax.faces.convert.Converter的实例。该调用方法不能向Converter传递参数。
f:converter,f:convertDateTime或其他自定义Converter标签可以对h:inputHidden,h:inputText,h:selectOneRadio等父标签的value值进行变换。

JSF Converter的使用:

使用converter属性调用指定id的Converter,例:

<h:inputHidden converter="javax.faces.DateTime" value="#{myBean.datetime}" />


使用f:converter标签调用指定id的Converter,例:

<h:inputText value="#{myBean.datetime}">
    <f:converter converterId="javax.faces.DateTime"></f:converter>
</h:inputText>


使用f:convertNumber等Converter标签或自定义Converter标签,例:

<h:inputText value="#{myBean.datetime}">
    <f:convertNumber type="number" pattern="#,###"/>
</h:inputText>


上面我们介绍了JSF Converter的基本概念,功能,JSF提供的默认Converter实现以及Converter的使用方法等。在下文中,我们将介绍如何自定义JSF Converter。


例子:转换成long类型的。

<h:inputText value="#{myBean.myId}">
    <f:converter converterId="javax.faces.Long"></f:converter>
</h:inputText>