2017-04-09 4 views
0

Ich verwende dieses Dokumentationsbeispiel als Referenz zum Erstellen eines dynamischen Rasters, indem Sie die Kopfzeilennamen und die erforderlichen Eigenschaften für ein bestimmtes Objekt angeben. http://jxls.sourceforge.net/samples/dynamic_grid.htmlJXLS dynamisches Raster löst null aus NestedNullException

Aber in meinem Fall Employee Objekt hat Eigenschaften verschachtelt „adres.housenumber“

public class Employee { 
    private String name; 
    private Date birthDate; 
    private BigDecimal payment; 
    private BigDecimal bonus; 
    private Adres adres; 
    // constructors and getters/setters 
    ..... 
} 

public class Adres { 
    private String housenumber; 
} 

Es funktioniert gut, wenn alle Mitarbeiter eine adres mit einem housenumber haben, wenn Mitarbeiter adres hat, dann habe ich unter Ausnahme :

verursacht durch: org.apache.commons.beanutils.NestedNullException: Null-Eigenschaftswert für 'adres.housenumber' auf Bean-Klasse 'class Employee'

bei org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty (PropertyUtilsBean.java:795) ~ [commons-Beanutils-1.9.3.jar: 1.9.3]
bei org.apache.commons.beanutils.PropertyUtilsBean .getProperty (PropertyUtilsBean.java:884) ~ [commons-beanutils-1.9.3.jar: 1.9.3]
unter org.apache.commons.beanutils.PropertyUtils.getProperty (PropertyUtils.java:464) ~ [commons- beanutils-1.9.3.jar: 1.9.3]
bei org.jxls.command.GridCommand.processBody (GridCommand.java:185) ~ [jxls-2.3.0.jar :?]
bei org.jxls. command.GridCommand.applyAt (GridCommand.java:137) ~ [jxls-2.3.0.jar :?]
bei org.jxls.area.XlsArea.applyAt (XlsArea.java:168) ~ [jxls -2.3.0.jar :?]
bei org.jxls.util.JxlsHelper.processGridTemplate (JxlsHelper.java:156) ~ [jxls-2.3.0.jar :?]

Diese Mitarbeiterdaten ist aus der Datenbank abgerufen, so dass ich keinen Zugriff darauf habe, sie vor dem Exportieren nach Excel zu ändern.

Irgendeine Idee/Hilfe bitte?

Antwort

0

das Problem ist aufgrund des GridCommand, wenn es die Eigenschaft einer Eigenschaft zu bewerten versucht, wenn es eine Null-Eigenschaft festgelegt ist. Apache PropertyUtils (verwendet von GridCommand) löst also eine Exception aus.

In Ihrem Beispiel Attribut adres in Ihrer Klasse Employee null ist, so dass die Auswertung von adres.housenumber eine Ausnahme auslöst.

Um dieses Verhalten zu vermeiden, können Sie ein Iterable-Objekt anstelle Ihrer Bean verwenden. Auf diese Weise wertet GridCommand Requisiten nicht aus, sondern fragt nur nach dem Iterable-Objekt seine Werte.

Ich habe dieses Projekt gemacht, um Ihnen zu zeigen, wie es funktioniert. https://github.com/LucianoZu/jxlsnofault

Sie können die IterableWrapper-Klasse verwenden, um Mitarbeiter einfach zu umbrechen und die Ausnahme zu vermeiden.

Verwandte Themen