In the faces-config add something like this:
 
<converter>
   <converter-id>NullStringConverter</converter-id>
   <converter-class>foo.bar.NullableStringConverter</converter-class>
</converter>

Regards, Stephan

________________________________

From: Jörn Zaefferer [mailto:[EMAIL PROTECTED] 
Sent: Monday, March 12, 2007 4:00 PM
To: MyFaces Discussion
Subject: Re: StringConversion to EMPTY_STRING


Could you post how you register that converter in the faces-config? Thanks.


On 3/12/07, Strittmatter, Stephan < [EMAIL PROTECTED] <mailto:[EMAIL 
PROTECTED]> > wrote: 

        I started this, but then I spreaded this code everywhere in my managed 
beans and it is difficult, when you use a member of a value object directly. 
        I created my own "NullableStringConverter" which is doing this Job now 
assigning it in the JSF. It is not just checking for empty String, the value 
has to be null-ed then also because of previous setted values: 
        
        My converter looks like this:
        
        
          /**
           * Get the given value as String. In case of an empty String, null is 
returned.
           *
           * @param value the value of the control
           * @param facesContext current facesContext 
           * @param uiComponent the uicomponent providing the value
           *
           * @return the given value as String. In case of an empty String, 
null is returned.
           *
           * @see javax.faces.convert.Converter#getAsObject 
(javax.faces.context.FacesContext, javax.faces.component.UIComponent, 
java.lang.String)
           */
          public Object getAsObject(FacesContext facesContext, UIComponent 
uiComponent, String value) {
        
            if (facesContext == null) { 
              throw new NullPointerException("facesContext");
            }
            if (uiComponent == null) {
              throw new NullPointerException("uiComponent");
            }
        
            return stringToValue(value); 
          }
        
          /**
           * Convert the String to value (String or null).
           *
           * @param value the string from webcomponent
           *
           * @return the object (null if trimmed String is Empty String)
           */
          protected Object stringToValue(String value) {
        
            if (value != null) {
              value = value.trim();
              if (value.length() > 0) {
                return value + "";
              }
            }
            return null; 
          }
        
          /**
           * Convert the value to String for web control.
           *
           * @param value the value to be set
           * @param facesContext current facesContext
           * @param uiComponent the uicomponent to show the value 
           *
           * @return the String-converted parameter
           *
           * @see 
javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, 
javax.faces.component.UIComponent, java.lang.Object)
           */
          public String getAsString(FacesContext facesContext, UIComponent 
uiComponent, Object value) { 
        
            if (facesContext == null) {
              throw new NullPointerException("facesContext");
            }
            if (uiComponent == null) {
              throw new NullPointerException("uiComponent");
            } 
            return valueToString(value);
          }
        
          /**
           * Converts the value to HTMLized String.
           *
           * @param value the object to be converted
           *
           * @return String representation
           */
          protected String valueToString(Object value) { 
        
            if (value == null) {
              return "";
            }
            if (value instanceof String) {
              return (String) value;
            }
            return value + "";
          }
        
        ________________________________ 
        
        From: Jörn Zaefferer [mailto:[EMAIL PROTECTED]
        Sent: Monday, March 12, 2007 9:29 AM
        To: MyFaces Discussion
        Subject: Re: StringConversion to EMPTY_STRING 
        
        
        You could add a check for the value to set in each modifier, something 
like this:
        
        public void setName(String newName) {
          if ( !"".equasl(newName) ) {
            name = newName;
          }
        }
        
        Still quite cumbersome...
        
        
        On 3/12/07, Strittmatter, Stephan <[EMAIL PROTECTED]> wrote:
        
                Hi Mike,
        
                thanks for this info. Then I have to add my converter manually 
to every 
                control :-/
        
        
                -----Original Message-----
                From: Mike Kienenberger [mailto:[EMAIL PROTECTED] 
<mailto:[EMAIL PROTECTED] > ]
                Sent: Thursday, March 08, 2007 7:42 PM
                To: MyFaces Discussion
                Subject: Re: StringConversion to EMPTY_STRING
        
                The JSF spec says that components will return the empty string, 
not 
                null.
        
                There is no way to specify a converter-by-type for String in 
JSF 1.1.
                You can specify String converters for JSF 1.2.
        
                 
https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id= 
<https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=> 
                131
        
                On 3/8/07, Strittmatter, Stephan <[EMAIL PROTECTED] > wrote:
                > Hello all,
                >
                > I had several times problems with inputText Components which 
are
                having
                > Strings as input.
                > If there is nothing typed in, the BackingBean get an 
EMPTY_STRING 
                (""),
                > but I would expect
                > null there? Is this the common behaviour?
                >
                > For Workaround, I created my own converter adding for every 
control. 
                Is
                > there a way to define
                > it for all String-Controls by default on the orther hand?
                >
                > Regards,
                >
                > Stephan
                > 
        
        
        
        
        


Reply via email to