Hallo,
was ist denn '
best-practice', um mit folgendem umzugehen:
Ich hab eine Entity-Bean mit einem
primitiven Datentyp:
Code:
private boolean enabled;
@Column(name = "ENABLED", nullable = true)
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
in DB2 hat das Feld "ENABLED" den Datentyp SMALLINT (das soll auch so bleiben).
In meiner View referenziere ich nun wie folgt:
Code:
<h:outputLabel for="selectEnabled" value="Select Enabled"/>
<h:selectBooleanCheckbox value="#{sessionBean.enabled}" id="selectEnabled"/>
(selectBooleanCheckbox benötigt den primitiven Datentyp boolean)
Nun bekomme ich vom Hibernate folgende Fehlermeldung:
Code:
org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of ...
Daraufhin hab ich den Datentyp in der Entity-Bean von boolean auf java.lang.Boolean geändert:Code:
private Boolean enabled;
@Column(name = "ENABLED", nullable = true)
public Boolean isEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
Es gibt nun keine Fehlermeldung von Hibernate, aber meine Checkbox funzt jetzt leider nicht. Ich bekomm folgende Fehlermeldung:
Code:
javax.el.PropertyNotFoundException: /make.xhtml @84,85 value="#{Bean.enabled}": Property 'enabled' not readable on type java.lang.Boolean
so, nun habe ich nur den Rückgabewert der Propertie von Boolean auf boolean gecastet (return enabled.booleanValue();) :
Code:
private Boolean enabled;
@Column(name = "ENABLED", nullable = true)
public boolean isEnabled() {
return enabled.booleanValue();
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
Leider ohne Erfolg - folgende Fehlermeldung erscheint:
Code:
javax.faces.FacesException: javax.el.ELException: /main.xhtml @84,85 value="#{Bean.enabled}": Error reading 'enabled' on type Bean
..
Caused by: java.lang.NullPointerException
at Bean.isEnabled(Bean.java:258)
Mit dem Cast "return (boolean) enabled;" bekomm ich dieselbe Fehlermeldung.
Daraufhin hab ich nun mit Autoboxing den Wert boolean nur in der setter-Methode zu einem Boolean gecastet:
Code:
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
Ich bekomme nun diese Fehlermeldung:
Code:
org.hibernate.PropertyAccessException: Exception occurred inside setter of Bean.enabled
Wenn ich nun folgendes mache, dann kommt keine Fehlermeldung:
Code:
public void setEnabled(Boolean pwexpire) {
pwexpire = this.pwexpire;
// this.pwexpire = pwexpire;
}
ABER: pwexpire = this.pwexpire; wäre doch für ein setter FALSCH!
Ist das Autoboxing (Cast) falsch?
Was soll ich nun machen? Ich kanns drehen und wenden, beide Seiten beschweren sich!!