1 Reply Latest reply on Feb 18, 2008 7:42 AM by Pete Muir

    Problem with custom converter for class access in facelets u

    Maik Ebert Newbie

      I try to register a custom converter for my business model enums in Seam 2.0.1.GA. This works fine until I do use facelets EL to access my properties.

      That's my enum:

      public enum Gender {
       MALE, FEMALE
      }


      Here's my converter (it's not finished, I know ;-):
      @Name("genderConverter")
      @org.jboss.seam.annotations.faces.Converter(forClass = Gender.class)
      public class GenderConverter implements Converter, Serializable {
      
       private static final long serialVersionUID = 3237852262587078904L;
      
       public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String string) {
      // TODO
       return Gender.MALE;
       }
       public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object object) {
       String retVal = null;
       if (object instanceof Enum) {
       final Enum<Gender> instance = (Enum<Gender>) object;
       final String resourceKey = instance.name();
       // final String resourceKey = instance.getClass().getName() + "." +
       // instance.name();
       try {
       retVal = ResourceBundle.instance().getString(resourceKey);
       } catch (MissingResourceException e) {
       // Ignore
       System.out.println(e);
       }
       if ("".equals(retVal)) {
       retVal = instance.name();
       }
       }
       System.out.println("retrieved gener " + retVal);
       return retVal;
      
       }
      
      }


      Now it depends on the facelets page if the above code is working.

      This works fine and retrieves the translation for the key from the messages properties ("male"):
      <div class="entry">
       <div class="label">Geschlecht:</div>
       <div class="output"><h:outputText value="#{member.gender}"/></div>
       </div>


      This doesn't work, because only the name of the enum ("MALE") is displayed:
      <div class="entry">
       <div class="label">Gender:</div>
       <div class="output">#{member.gender}</div>
       </div>


      Has anyone a idea why my custom converter doesn't work with the second style?

      Thanks, Maik.