The Customer Converter
The Customer Converter Without Parameters
In the following, we use the conventional prefix "f" and "h" for the JSF core and html tag libraries respectively. We also assume that there is a customer converter with the ID com.sample.customer.converter.id and the class name com.sample.CustomerConverter. Furthermore, we assume that this converter is used to do the conversion between a string and the object of the class com.sample.CustomerObject.Method 1
Use the converter ID. The converter ID is declared in the faces-config.xml file.<h:inputText value="#{someBean.someVar}"> <f:converter converterId="com.sample.customer.converter.id"/> </h:inputText>
Method 2
Use the converter attribute:<h:inputText value="#{someBean.someVar}" converter="com.sample.customer.converter.id" />
Method 3
Implements a method in the back bean to return a converter:<h:inputText value="#{someBean.somevar}" converter="#{backBean.converter}" />Here the backBean class must implement the following method:
public Converter getConverter(){...}
Method 4
If the converter class CustomerConverter is used for all the conversions between the String and the object of the class CustomerObject, you can specify CustomerConverter as the default for the CustomerOjbect class in faces-config.xml. And that is it. No other things in JSP pages are needed.In faces-config.xml, do the following:
<converter> <converter-for-class>com.sample.CustomerObject</converter-for-class> <converter-class>com.sample.CustomerConverter</converter-class> </converter>In the JSP file, you simply write
<h:inputText value="#{someBean.someVar}" />Note that here the type of the variable someVar must be the class CustomerObject.
The Customer Converter With Parameters
In this case, you will need to implement the converter class and the tag handler class for the converter. The tag handler class should extend the JSF class ConverterELTag. It should have the method createConverter() that returns an instance of the converter class. You also need to create the customer TLD file for your tag classes.Note that there is also a way so you can have a customer converter that needs parameters but you do not need to create the tag handler class and TLD files. You can just as simply use the methods described in the section "The Customer Converter Without Parameters". The trick is to pass the parameter to the back bean and get the value of that parameter from the bean when the customer converter does the conversion. The following is an example.
<h:outputText value="#{someBean.someVar}"> <f:converter converterId="myConverterId" /> <f:attribute name="myConverterParameterName" value="someValue" /> </h:outputText>Then in the converter, you can get the parameter value as follows:
parameterValue = component.getAttributes().get("myCoverterParameterName");
The Customer Validator
The Customer Validator Without Parameters
Mehtod 1
<h:inputText .... > <f:validator validatorId="..." /> </h:inputText>
Method 2
<h:inputText value="#{someBean.someVar}" validator="#{someBean.validatingMethod}" />Notice here that the method in the "validator" attribute does not return an object of the validator class. Instead, its return type is void. This is different from the converter case where the corresponding method returns an object of the customer converter class. Here the validation method validates the data and throws a ValidatorException( a Runtime exception ) if it finds any error.