2009-06-16 8 views
2

Ich habe ein numerisches Datenbankfeld (numerisch (3) in SQL Server 2000), das Nullwerte zulässt, und null ist mein bevorzugter Wert "kein Wert".Wie wird NULL für numerische Werte beibehalten, wenn BeanUtils.copyProperties verwendet wird?

Das Feld wird in der nicht-primitiven Java Long Klasse in dem Ruhezustand abgebildet:

<property column="my_column" name="my_column" type="java.lang.Long" not-null="false" />

Das Feld wird als java.lang.Long in meiner beiden Streben Form und Bohne. Wenn das Struts-Formular zum ersten Mal erstellt wird, habe ich überprüft, dass die Eigenschaft null zurückgibt. Wenn die Bean erstellt wird (aus der Datenbank), habe ich überprüft, dass die Eigenschaft null zurückgibt. Nach der Verwendung von BeanUtils.copyProperties() zum Füllen des Struts-Formulars mit den Bean-Werten gibt die Eigenschaft jedoch 0 zurück. Wenn ich fortfahre und das Formular speichere, hat die Datenbank den Wert 0.

Verwende ich die falschen Typen oder die Kombination von Typen (in der Datenbank und/oder Hibernate/Java), um einen Nullwert für ein numerisches Feld beizubehalten? Soll ich den numerischen SQL-Typ einer anderen Java-Klasse wie BigDecimal zuordnen? In der Forschung habe ich erwähnt, eine Converter Klasse. Muss ich eine solche Klasse erstellen, damit BeanUtils Nullwerte richtig verwaltet werden?

Antwort

4

Sie müssen einen LongConverter mit Null für einen Standardwert in BeanUtils registrieren.

ConvertUtils.register(new LongConverter(null), Long.class); 
+1

Danke. Ich habe 'ConvertUtils.register (new LongConverter (null), Long.class); 'kurz vor dem Aufruf der copy-Eigenschaften hinzugefügt und das behoben. Ist dies jedoch der beste Ort, um den Long-Konverter zu registrieren? Nach dem, was ich gelesen habe, ist die Converter-Registrierung global, also sollte dies anderswo registriert werden, und wenn ja, wo? – Nicole

+0

Ich habe den Registrierungsaufruf an ein Initialisierungs-Servlet für die Anwendung verschoben, sodass es jetzt global funktioniert. Danke für Ihre Hilfe. – Nicole

+0

Klingt wie der richtige Ort um es zu tun, tut mir leid, dass ich nicht antwortete. – stevedbrown

0

In web.xml Verwendung unter Code

<init-param> 
     <param-name>convertNull</param-name> 
     <param-value>true</param-value> 
</init-param> 

So wandeln diese den Standard 0 bis null.

Verwandte Themen