Hallo Ihr!
Ich migriere gerade meine Anwendung von JSF 1.2 zu 2.0. Dazu habe ich u.a. einen Typ-abhängigen Konverter registriert, der leere String in Null und umgekehrt konvertieren soll. Der Konverter wird auch aufgerufen und funktioniert korrekt. Der Null-Wert erreicht aber nicht die Bean und wird dem zufolge auch nicht persistiert. Mir fällt langsam keinen Grund mehr ein. Hier Ausschnitte meines Codes.
EmptyToNullConverter.java:
editAlbum.xhtml:
faces-config.xml (Migriere ich später noch in Annotations):
Hat jemand eine Idee, warum der Null-Wert nicht in der Bean landet?
Titus
Ich migriere gerade meine Anwendung von JSF 1.2 zu 2.0. Dazu habe ich u.a. einen Typ-abhängigen Konverter registriert, der leere String in Null und umgekehrt konvertieren soll. Der Konverter wird auch aufgerufen und funktioniert korrekt. Der Null-Wert erreicht aber nicht die Bean und wird dem zufolge auch nicht persistiert. Mir fällt langsam keinen Grund mehr ein. Hier Ausschnitte meines Codes.
EmptyToNullConverter.java:
Java:
@FacesConverter(forClass = String.class)
public class EmptyToNullConverter implements Converter {
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
if (value == null || value.trim().length() == 0) {
if (component instanceof EditableValueHolder) {
((EditableValueHolder) component).setSubmittedValue(null);
}
return null;
}
return value;
}
public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
return (value == null) ? null : value.toString();
}
}
editAlbum.xhtml:
Java:
<h:inputText id="label" value="#{albumDetailBean.album.label}" size="50"></h:inputText>
Java:
public class AlbumDetailBean {
private AlbumService albumService;
private Album album;
public static AlbumDetailBean getInstance() {
FacesContext fc = FacesContext.getCurrentInstance();
return (AlbumDetailBean) fc.getApplication().evaluateExpressionGet(fc, "#{albumDetailBean}", AlbumDetailBean.class);
}
public String save() {
if (album.getId() == null)
albumService.insert(album);
else
albumService.update(album);
return "success";
}
public Album getAlbum() {
return album;
}
public void setAlbum(Album album) {
// Hier ist album.label wieder "" und nicht null...!
this.album = album;
}
public void setAlbumService(AlbumService albumService) {
this.albumService = albumService;
}
}
faces-config.xml (Migriere ich später noch in Annotations):
Java:
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<managed-bean>
<managed-bean-name>albumDetailBean</managed-bean-name>
<managed-bean-class>de.freakworm.manager.controller.AlbumDetailBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>albumService</property-name>
<property-class>de.freakworm.manager.service.AlbumService</property-class>
<value>
#{albumService}</value>
</managed-property>
</managed-bean>
</faces-config>
Hat jemand eine Idee, warum der Null-Wert nicht in der Bean landet?
Titus