0 Replies Latest reply on Aug 24, 2010 3:30 AM by Sofie Struyve

    Using custom String calendar converter

    Sofie Struyve Newbie



      In the (seam) project I'm currently working on,

      we represent dates in our model as a string, with a specific format (yyyyDDmm).


      However, we don't want to represent the user with this internal format, but with a different format (dd-MM-yyyy).


      I tried to solve this by writing a custom converter and add that to the rich:calendar control.


      This converter uses the default DateConverter to convert the GUI datestring (from dd-MM-yyyy) to a date, and then uses

      our internal converter to convert this date to the internal string format (yyyyMMdd), and vice-versa.


      dd-MM-yyyy ->(internalconverter)-> date ->(defaultDateConverter)-> yyyyMMdd

      yyyyMMdd ->(defaultDateConverter)-> date ->(internalConverter)-> dd-MM-yyyy





      public class FilterDateConverter extends DateConverter {


          public Object getAsObject(FacesContext context, UIComponent component, String value) {

              final Object date = super.getAsObject(context, component, value);

              return getConverter().toString(date);



          public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {

              final Object date = getConverter().fromString((String)arg2);

              return super.getAsString(arg0, arg1, date);



          private DateDataTypeConverterImpl getConverter() {

              return (DateDataTypeConverterImpl)Component.getInstance(DateDataTypeConverterImpl.class, true);



      And in the gui:


                      popup="true" datePattern="dd-MM-yyyy" showApplyButton="false"
                      enableManualInput="true" cellWidth="24px" cellHeight="22px" style="width:200px"


      Unfortunately, this doesn't work.


      the org.richfaces.component.UICalendar class assumes that if the value is a string,

      it knows how to convert the string to a date and tries to convert 20100824 to a date using dd-MM-yyyy,

      which obviously doesn't work. (see UICalendar.getAsDate(Object date))


      I solved this by wrapping our internal string in a wrapped class (which isn't a String), but I was wondering if there is a good reason

      why UICalendar doesn't use the custom converter for strings. or should I raise a bug for this?