2016-03-22 4 views
1

Wenn ich Apache BeanUtils verwenden, um eine Datumseigenschaft in meiner Bean festzulegen, schlägt es mit "Keine Setter-Methode in Klasse" fehl. Nicht-Datum-Eigenschaften sind korrekt festgelegt.Keine Setter-Methode in der Klasse bei Verwendung von PropertyUtils.setProperty

Der folgende Code schlägt mit Property 'availableFrom' has no setter method in class 'class com.brightgreenstar.entities.CapitalAsset'

if (value instanceof String){ 
    if ((key.equals("lastUpdatedDate")) || (key.equals("availableFrom")) || (key.equals("availableTo"))|| (key.equals("purchaseDate"))) { 
     DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss ZZZZ"); 
     Date date = df.parse((String)value); 
     PropertyUtils.setProperty(asset,key,date); 
     // PropertyUtils.setSimpleProperty(asset,key,value); // Also fails for dates 
    }else{ 
     PropertyUtils.setSimpleProperty(asset,key,value); 
    } 
} else{ 
     PropertyUtils.setSimpleProperty(asset,key,value); 
} 

Wenn ich Datum Eigenschaften nicht PropertyUtils verwenden zu aktualisieren und rufen Sie die Setter direkt (z asset.setAvailableFrom), dann funktioniert es gut. Dies ist eine praktikable Lösung für mich, aber ich würde lieber PropertyUtils verwenden.

if (value instanceof String){ 
    if ((key.equals("lastUpdatedDate")) || (key.equals("availableFrom")) || (key.equals("availableTo"))|| (key.equals("purchaseDate"))) { 
     DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss ZZZZ"); 
     Date date = df.parse((String)value); 
     if (key.equals("availableFrom")){ 
      asset.setAvailableFrom(date); // This works 
     } 
    }else{ 
     PropertyUtils.setSimpleProperty(asset,key,value); 
    } 
}else{ 
    PropertyUtils.setSimpleProperty(asset,key,value); 
} 

Jeder Ratschlag geschätzt.

CapitalAsset Bohne:

public class CapitalAsset { 

private Date availableFrom; 
private Date availableTo; 
public String getAvailableFrom(){ 
    try { 
     DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss z"); 
     return df.format(availableFrom); 
    } catch (Exception e) { 
     return ""; 
    } 
} 

public void setAvailableFrom(Date availableFrom) { 
    this.availableFrom = availableFrom; 
} 

public String getAvailableTo(){ 
    try { 
     DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss z"); 
     return df.format(availableTo); 
    } catch (Exception e) { 
     return ""; 
    } 
} 

public void setAvailableTo(Date availableTo) { 
    this.availableTo = availableTo; 
} 
} 
+2

ist 'com.brightgreenstar.entities.CapitalAsset' enthält' availableFrom' oder seine Super-Klasse? –

+1

Getter für 'availableFrom' gibt' String' zurück, aber Setter akzeptiert 'Date', daher kann diese Klasse nicht richtig geprüft werden und die Zuweisung schlägt fehl. –

+0

CapitalAsset enthält availableFrom. Details zu meiner Frage hinzugefügt. Aber wenn ich meinen Code nochmal betrachte, denke ich, dass das Problem sein könnte, dass mein Getter das Datum nicht zurückgibt. Ich werde das ändern und erneut testen. – greentor

Antwort

0

Sie benötigen einen Getter beinhalten, die Datum zurückgibt:

public Date getAvailableFrom(){ 
    return availableFrom; 
} 
Verwandte Themen