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对将要显示的值进行变换。
Type | Class | Name | For 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 |
<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值进行变换。
使用converter属性调用指定id的Converter,例:
使用f:converter标签调用指定id的Converter,例:
<f:converter converterId=" javax.faces.DateTime"></f:converter>
</h:inputText>
使用f:convertNumber等Converter标签或自定义Converter标签,例:
<f:convertNumber type=" number" pattern=" #,###"/>
</h:inputText>
上面我们介绍了JSF Converter的基本概念,功能,JSF提供的默认Converter实现以及Converter的使用方法等。在下文中,我们将介绍如何自定义JSF Converter。
--------------------------------------------------------------------
转自:http://xiejibin.blog.163.com/blog/static/538770992008816359667/
参考:http://docs.oracle.com/javaee/6/api/javax/faces/convert/Converter.html