users@glassfish.java.net

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

From: <glassfish_at_javadesktop.org>
Date: Wed, 27 Oct 2010 04:31:52 PDT

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

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


    public AusbildungsartConverter() {
        super(Ausbildungsart.class);
    }
}
[/code]

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:

[code]
<!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>
[/code]

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:

[code]
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
 }

     
[/code]
 

    
[code]
 @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;

    }

 
}
[/code]


I have NO faces-config.xml

Does anybody have an idea what might cause this behavior?

This is absolutely driving me nuts.


Thanks,


Hans
[Message sent by forum member 'hmrupp']

http://forums.java.net/jive/thread.jspa?messageID=486333