0 Replies Latest reply on Oct 27, 2010 4:08 AM by marcusdidiusfalco

    Very strange behavior: 'Ghost' Converter treats text-input as Enum

    marcusdidiusfalco

      JBoss 6 M5 (out of the box, nothing added)

       

      I have a poject with JSF 2.0 Facelets. I have several EnumConverter classe to bind enums directly to the view like:

       

      @FacesConverter(value="AusbildungsartConverter")
      public class AusbildungsartConverter extends EnumConverter {

       

          public AusbildungsartConverter() {
              super(Ausbildungsart.class);
          }
      }

       

      I use them in <h:selectOneMenu>

      and that works just fine.

       

      However after I have added a simple <h:inputText without an converter I cannot enter any free text. Even on a new test page:

       

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:ui="http://java.sun.com/jsf/facelets">

       

          <h:body>
              <h:form>
                  <h:inputText id="fasel" value="#{berechnung.aez.fasel}" />
                  <h:message for="fasel"/>
                  <br />
                 
                  <h:commandButton value="Submit" action="submit()"/>
              </h:form>
          </h:body>

       


      </html>

       

      After entering 'blubber' I get the conversion error

      j_idt4:fasel: 'blubber' must be convertible to an enum from the enum that contains the constant 'blubber'.

       

      Managed Bean:

      package beans;

       

       

      @ManagedBean(name="berechnung")
      @SessionScoped
      public class Berechnung {

       

          @EJB
          private BafoegRechner bafoegRechner;
         
          @EJB
          private AezDAO aezDAO;
         
          private AenderungszeitraumFlat aenderungszeitraumFlat = new AenderungszeitraumFlat();
          private BerechnungErgebnis berechnungErgebnis;

       

          private UnterhaltsberechtigterP unterhaltsberechtigter;
         
          public AenderungszeitraumFlat getAez() {
              return aenderungszeitraumFlat;
          }

       

          public void setAez(
                  AenderungszeitraumFlat aenderungszeitraumFlat) {
              this.aenderungszeitraumFlat = aenderungszeitraumFlat;

          }

       

          public BerechnungErgebnis getErgebnis() {
              return berechnungErgebnis;
          }

       

          public void setErgebnis(BerechnungErgebnis berechnungErgebnis) {
              this.berechnungErgebnis = berechnungErgebnis;

          }

       

          public String doBerechnung() {
              Aenderungszeitraum aenderungszeitraum = this.aenderungszeitraumFlat.buildAenderungszeitraum();
              berechnungErgebnis = bafoegRechner.berechnneFoerderung(aenderungszeitraum);
              return "ergebnis.xhtml";
          }
         
          public void save() {
              aezDAO.saveAez(aenderungszeitraumFlat);
              aenderungszeitraumFlat = new AenderungszeitraumFlat();
          }
         
          public List<Long> getIds() {
              List<Long> ids = aezDAO.getIds();
              return ids;
          }
         
          public List<Description> getDescriptions() {
              List<Description> descriptions = aezDAO.getDescriptions();
              return descriptions;
          }
          
         
          /**
           * Drop Down Menü für Rechtliche Stellung Ausbildungstätte
           * @return
           */
          public SelectItem[] getRechtsStellungSelectOne() {
              SelectItem[] items = new SelectItem[RechtlicheStellungAusbildungsstaette.values().length];
             
              int i=0;
              for (RechtlicheStellungAusbildungsstaette rechtlicheStellungAusbildungsstaette : RechtlicheStellungAusbildungsstaette.values()) {
                  items[i++] = new SelectItem(rechtlicheStellungAusbildungsstaette, rechtlicheStellungAusbildungsstaette.toString());
              }
             
              return items;
          }

           // More stuff like that
      }

       

       

       

      @Entity
      @NamedQueries({
          @NamedQuery(name="selectIds", query="SELECT aez.id FROM AenderungszeitraumFlat aez"),
          @NamedQuery(name="selectDesc", query="SELECT NEW glue.Description(aez.id, aez.beschreibung) FROM AenderungszeitraumFlat aez"),
          @NamedQuery(name="selectDescWorkaround", query="SELECT aez.id, aez.beschreibung FROM AenderungszeitraumFlat aez")
      })

       

      public class AenderungszeitraumFlat {
         
          @Id @GeneratedValue
          private long id;
         
          private String beschreibung;
          private String fasel;
         
         
         
        

       

          public String getFasel() {
              return fasel;
          }

       


          public void setFasel(String fasel) {
              this.fasel = fasel;

          }


      }

      ---------------------------------------------------------------------------------------------------------------------------

       

      I have NO faces-config.xml

       

      Does anybody have an idea what might cause this behavior?

      This is absolutely driving me nuts.

       

      Thanks,

       

      Hans