As per specifications:

3.3.3 Standard Converter Implementations

   JSF provides a set of standard Converter implementations. A JSF
   implementation must
   register the DateTime and Number converters by name with the
   Application instance
   for this web application, as described in the table below. This
   ensures that the converters are
   available for subsequent calls to Application.createConverter().
   Each concrete
   implementation class must define a static final String constant
   CONVERTER_ID whose value
   is the standard converter id under which this Converter is registered.
   The following converter id values must be registered to create
   instances of the specified
   Converter implementation classes:
   .....
     javax.faces.Double -- An instance of
     javax.faces.convert.DoubleConverter (or a subclass of this class).



I recommend you change your converter declaration to match the specification rules. Note: i am not 100% sure it is overridable from default behaviour, but this part of section is hopefull:

   A JSF implementation must register converters for all of the
   following classes using the by-
   type registration mechanism:
   ...
     java.lang.Double, and java.lang.Double.TYPE -- An instance of
     javax.faces.convert.DoubleConverter (or a subclass of this class).



Alan Romaniuc a écrit :


Hi,

I can not set a converter for the type java.lang.Double. I would like to do that once the we use comma to separate decimals (Using a locale based converter) I am using myfaces 1.2.1-snapshot from 17 december, but I tried with others too.
I use something like that:
<converter>
       <converter-id>iDoubleConverter</converter-id>
       <converter-for-class>java.lang.Double</converter-for-class>
<converter-class>jsf.converter.InternationalDoubleConverter</converter-class>
   </converter>


And my converter:
===============================
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
             FacesContext fc = FacesContext.getCurrentInstance();
       Locale l = fc.getViewRoot().getLocale();
             if (value != null) {
           value = value.trim();
           if (value.length() > 0) {
               try {
return NumberFormat.getNumberInstance(l).parse(value).doubleValue();
               } catch (ParseException ex) {
throw new ConverterException("Bad String " + value + " " + l);
               } catch (NumberFormatException e) {
throw new ConverterException("Format is not a Number for locale" + l);
               }
           }
       }
       return null;
   }

public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) {

       if (value == null) {
           return "";
       }
       if (value instanceof String) {
           return (String) value;
       }
       try {
           FacesContext fc = FacesContext.getCurrentInstance();
           Locale l = fc.getViewRoot().getLocale();
log.debug("Converting Object" + value + " to " + l.toString());
           return NumberFormat.getNumberInstance(l).format(value);
       } catch (Exception e) {
           throw new ConverterException("Format is not a Number");
       }
   }
============

If I use a converter in the component, it will work, showing that the converter is working, but I woul like to register it to all Double objects.

Is this a bug from myfaces?








Reply via email to