Very strange behavior: 'Ghost' Converter treats text-input as Enum
marcusdidiusfalco Oct 27, 2010 4:08 AMJBoss 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