Frameworks| Hibernate| Struts| JSF| JavaFX| Ajax| Spring| DOJO| JDO| iBatis| Questions?

 

 

 

 

 

 

 

 

 

 

 

 

 

Search Tutorials

Latest Questions
Comments
 
Using Standard Converter & Custom Converter 
 

Convertors are used to make sure the component value is of right type. When the user inputs value to the component, it is simple string value.

 

Using Standard Converter & Custom Converter

                          

Convertors are used to make sure the component value is of right type. When the user inputs value to the component, it is simple string value. Now you may be in the need of using this value as a different object like Boolean, Date etc. Converters can help in this conversion.

JSF framework has provided many converters like Boolean Converter, Byte Converter, Number Converter etc. These converters convert values into appropriate type of object and returns it also to the page in the appropriate format.

Using the Standard Converters:

JSF provides standard converters for all basic types like Byte, Short, Integer, Long, Float, Double, BigDecimal, BigInteger, Boolean and Character. If you don't specify the converter for the component then JSF itself will apply the appropriate converter for the component. For example, if the component is associated with a property of type double, JSF will choose the Double converter.

For example:

<h:inputText id="num" value="#{MyBean.number}"/>

 

Using DateTimeConverter

If you want to convert a component value to a Date type then <f:convertDateTime/> tag can be used inside the component tag. It has many attribute like dateStyle, locale, pattern, timeStyle, timeZone etc which can be used to to specify the format and type of the data.

For example:

<h:inputText id="date" value="#{ManagedBean.date}">
            <f:convertDateTime pattern="dd/MM/yyyy"/>
</h:inputText>

<h:message for="date" style="color:RED"/>

<f:convertDateTime/> ensures the date is convertible into a date object of the format dd/MM/yyyy (day/month/year).

 

Using NumberConverter

If you want to convert a component value to a Number type then <f:convertNumber/> tag can be used inside the component tag. It has many attribute like integerOnly, maxIntegerDigits, currencyCode, currencySymbol, pattern etc.

For example:

1.

<h:outputText value="#{ManagedBean.number}">
      <f:convertNumber type="number" integerOnly="true" maxIntegerDigits="2"/>
</h:outputText>

displays only the integer part and only 2 digits of the value.

2.

<h:inputText id="salary" value="#{ManagedBean.salary}">
        <f:convertNumber currencySymbol="$" type="currency"/>
</h:inputText><br>
<h:message for="salary" style="color:RED"/>

<h:outputText value="#{ManagedBean.salary}">
        <f:convertNumber currencySymbol="$" type="currency"/>
</h:outputText>

takes the input value with $ symbol and displays again the value with $ symbol.

 

Custom Converter

JSF flexible architecture provides you freedom to create your own converters. These can be used to check the value in the correct format. For example, In our application user is provided an input box to fill time in "hours:minutes:seconds" format. This String is converted as Object by the converter and also converted back in String when it needs to display in the web-page. Now if the user doesn't fill time in correct format then it displays error message showing the conversion could not be successful.

Steps to create a Custom Converter:

1. Create a class that implements javax.faces.converter.Converter interface.

2. Import necessary packages and classes. 

3. Implement two abstract classes "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.

package roseindia;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.*;
import javax.faces.application.*;

public class hr_mi_se_Converter implements Converter {
      public hr_mi_se_Converter() {
}

public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String param){
      try {
           String hr_mi_se[] = param.split(":");
           int seconds = 
           Integer.parseInt(hr_mi_se[0])*60*60 + 
           Integer.parseInt(hr_mi_se[1])*60+
           Integer.parseInt(hr_mi_se[2]);
           Integer sObject= new Integer(seconds);
           return sObject;
      }
      catch (Exception exception) {
          throw new ConverterException(exception);
      }
}

public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object obj) {
       try {
           int total_seconds = (int)((Integer)obj).intValue();
           int hours=(total_seconds)/(60*60); 
           int rem=(total_seconds)%(60*60); 
           int minutes=rem/60; 
           int seconds=rem%60; 
           String str_hours=""+hours; 
           String str_minutes=""+minutes;
           String str_seconds=""+seconds;

           if(hours<10){
                 str_hours="0"+hours;
           }
           if(minutes<10){
                 str_minutes="0"+minutes;
           }
           if(seconds<10){
                 str_seconds="0"+seconds; 
           }
           return str_hours + ":" + str_minutes + ":" + str_seconds;
     }  
     catch (Exception exception) {
           throw new ConverterException(exception);
      }
   }
}


4. Configure the 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). 

<converter>
      <converter-id>hr_mi_se_Converter</converter-id>
      <converter-class>roseindia.hr_mi_se_Converter</converter-class>
</converter>


5. 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.
6. Use <h:message> tag to display the error message.

<h:inputText id="input_text" value="#{ManagedBean.time}">
        <f:converter converterId="hr_mi_se_Converter" />
</h:inputText>

<h:message for="input_text" style="color:RED"/>

 

Download code for all examples

                          

» View all related tutorials
Related Tags: c file ide orm text date jsf form internationalization time air button io dates format label numbers vi locale key

Leave your comment:

Name:

Email:

URL:

Title:

Comments:


Enter Code:

Audio Version
Reload Image
 

Note: Emails will not be visible or used in any way, and are not required. Please keep comments relevant. Any content deemed inappropriate or offensive may be edited and/or deleted.

No HTML code is allowed. Line breaks will be converted automatically. URLs will be auto-linked. Please use BBCode to format your text.

Add This Tutorial To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Training Courses
Tell A Friend
Your Friend Name
Software Solutions
Least Viewed
Most Rated
Recently Viewed
Search Tutorials

 

 
 

Home | JSP | EJB | JDBC | Java Servlets | WAP  | Free JSP Hosting  | Search Engine | News Archive | Jboss 3.0 tutorial | Free Linux CD's | Forum | Blogs

About Us | Advertising On RoseIndia.net  | Site Map

India News

Indian Software Development Company | iPhone Development Company in India | Flex Development Company in India | Java Training Delhi | Java Training at Noida |

Send your comments, Suggestions or Queries regarding this site at roseindia_net@yahoo.com.

Copyright © 2008. All rights reserved.