Q: Which standard
converters have their own tags?
DateTimeConverter and NumberConverter are two
standard converters that have their own tags
convertDateTime and convertNumber respectively
that help configuring the format of the component
data by configuring tag attributes.
DateTimeConverter :
A component data can be converted to a Date
object using convertDateTime tag within the
component tag like,
<h:inputText value="#{Bean.RegisterDate}">
<f:convertDateTime pattern="MMM,dd,YYYY"
/>
</h:inputText>
Q: NumberConverter : Converter for dealing with
numbers such as type of number, maximum integer
digits, currency symbol etc.
<h:inputText id="it" value="#{Bean.value}">
<f:convertNumber maxFractionDigits="3"
type="currency"
currencySymbol="$"
maxIntegerDigits="4" />
</h:inputText>
Q: What are the ways of using standard converters
of JSF?
Standard converters other than the two which
have their own tags (DateTimeConverter and NumberConverter)
can be used in one of the following three ways.
The first one converts the model value of the
component and the other two ways convert the
component's local value.
a. Bind UI Component to Backing Bean Property
:
Make sure that the component has its value bound
to a backing bean property of the same type
as the converter. For example, converting component
data to a float number requires binding the
component to the property like :
Float value = 0.0;
public Float getValue(){ return value;}
public void setValue(Float value) {this.value
= value;}
b. Use “converter” attribute on
the UI Component :
Using the converter attribute of the component
tag. Just specify the fully qualified class
name or ID of the converter in the converter
attribute. If the component is not bound to
a bean property then this option can be used.
For example,
<h:inputText converter="javax.faces.Integer"
/>
c.
d. Use <f:converter> Tag with ConverterId
Attribute :
Using converter tag within the component tag
and refer the converter by specifying the ID
of the converter in the convertId attribute.
For example:
<h:inputText value="#{Bean.Value}"
/>
<f:converter converterId="Float"
/>
</h:inputText>
Q: When to create and use custom convertors?
The main reasons behind creating our converter
are :
a. When we want to convert a component's data
to a type other than a standard type
b. When we want to convert the format of the
data.
Read more at http://www.roseindia.net/jsf/customconverter.shtml
Q: What are the steps of creating and using
custom converter in our application?
Creating and using a custom converter requires
the following steps :
Steps to follow :
a. Create a class that implements javax.faces.converter.Converter
interface.
b. Import necessary packages and classes.
c. Implement two abstract methods "getAsObject()",
"getAsString()" provided by Converter
interface. getAsObject() method converts the
String (User Input) to Object and getAsString()
method converts the Object to String to send
back to the page.
d. Register the converter class in configuration
file (faces-config.xml) adding <converter>
element. This element has child elements <converter-id>
(name of the converter to be used while programming
)and <converter-class> ( name of the converter
class which we have created).
e. Create view page where <f:converter>
tag is used with attribute "converterId"
which specifies the name of the converter which
we have specified in <converter-id> element
of <converter> element in "faces-config.xml"
file.
f. Use <h:message> tag to display the
error message.
Read more at http://www.roseindia.net/jsf/customconverter.shtml
Q: What
are the ways to register the custom converters
in faces context?
After creating custom converter class implementing
Converter interface it needs to register in
the faces context. This can be done in one of
the two ways :
a. Register the converter class with the id.
This id is used in <f:convertrer> tag
in our view page (For example, JSP).
<converter>
<converter-id>ms_Converter</converter-id>
<converter-class>ms_Converter</converter-class>
</converter>
b. Use this converter in the view page as :
<h:inputText id="input_text">
<f:converter converterId="ms_Converter"
/>
</h:inputText>
c.
d. Register the converter class to handle all
"Email" objects, for example, automatically.
<converter> <converter-for-class>Email</converter-for-class>
<converter-class>EmailConverter</converter-class>
</converter>
e. If we register the EmailConverter class to
handle all Email objects automatically then
there is no need to use the <f:converter/>
tag in view page. Use this converter as :
<h:inputText id="phone" value="#{Bean.email}">
</h:inputText>