0
public class Model {
}

public class SuperclassDTO {
    private boolean funny = true;

    public boolean isFunny() {
        return funny;
    }

    public boolean setFunny(boolean f) {
        this.funny = f;
    }
}

public class SubclassDTO extends SuperclassDTO {
}


new SubclassDTO().isFunny() //returns true
SubclassDTO dto =  binder.bindFromBusinessObject(SubclassDTO.class, new Model());
dto.isFunny(); //returns false!!!!

これは奇妙ではありませんか?モデルクラスには「面白い」フィールドはありませんが、どういうわけか dto が間違った値でバインドされています。最初に、jDTO には "getFunny" 規則が必要であると考えたため、値を読み取ることができず、単に "false" に設定しましたが、getter 名を "getFunny" に変更しても問題は解決しません。また、SuperclassDTO を変更することもできません。正しい値をバインドするにはどうすればよいですか?

ちなみにJdtoバージョン1.4...

4

1 に答える 1

0

あなたが経験している動作は、構成上の慣習のアプローチの「副作用」です。DTO のすべてのフィールドは、@DTOTransient注釈またはtransientXML ファイルの構成を使用して一時的としてマークしない限り、構成されます。構成されたフィールドにソース Bean に対応するフィールドがない場合、デフォルト値が設定されます。これが、この動作が発生している理由です。

この問題を解決するには、いくつかのオプションがあります。

  • @DTOTransient注釈を DTO に追加します。
  • DTO を変更することはできないため、XML を使用して構成できます。
  • バインディング ライフサイクルを使用して値を復元します。サブクラスにコードを追加する。

github の jDTO イシュー トラッカーでバグ レポートを送信することもできます。

于 2014-01-29T13:18:56.507 に答える