2016-03-22 8 views
1

Apache beanUtilsを使用してBeanの日付プロパティを設定しようとすると、「クラス内にsetterメソッドがありません」というエラーが発生します。日付以外のプロパティが正しく設定されています。PropertyUtils.setPropertyを使用しているときにクラス内にセッターメソッドがありません

私は日付のプロパティを更新し、ちょうどそれが正常に動作します(例えばasset.setAvailableFrom)直接セッターを呼び出すためにPropertyUtilsを使用しない場合は、次のコードは、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); 
} 

で失敗します。これは私のために実行可能なソリューションですが、私はPropertyUtilsを使用することを好むでしょう。

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); 
} 

ご了承ください。

CapitalAsset豆:

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

をcom.brightgreenstar.entities.CapitalAsset'が 'availableFrom'またはそのスーパークラスが含まれている'のですか? –

+1

'availableFrom'のgetterは' String'を返しますが、setterは 'Date'を受け入れます。したがって、このクラスは正しくイントロスペクトされず、代入は失敗します。 –

+0

CapitalAssetにavailableFromが含まれています。私の質問に詳細を追加しました。しかし、私のコードをもう一度見れば、私のゲッターが日付を返さないことが問題だと思う。私はそれを変更して再びテストするつもりです。 – greentor

答えて

0

は日付を返すゲッター含める必要があります。

public Date getAvailableFrom(){ 
    return availableFrom; 
}