0

次の SpringMVC の問題に遭遇しました。特定の Address サブオブジェクトを使用するドメイン オブジェクトがありますが、変換によって別のAddress オブジェクトを使用するには、ゲッター/セッターを微調整する必要があります。これはアーキテクチャ上の要件です。

public class DomainObj {
    protected DomainObj.Address address;

    public anotherpackage.new.Address getAddress()
    {
       return convertFrom(address);
    }

    public void setAddress (anotherpackage.new.Address value)
    {
        this.address = convertTo(value);
    }

}

// Internal Address object, old, #1
public static class Address {
     protected String street1;
     protected String street2;
     // etc., getters/setters
}

次に、JSP で、入力テキスト フィールドを新しいAddress オブジェクト (変換の結果) にバインドします。これを処理する必要があります。この新しい 2 番目の Address オブジェクト ( anotherpackage.new.Address) には、古いオブジェクトの「Street1」とは異なる「addressLine1」などのフィールドがあります。

<form:input path="topObject.address.addressLine1" />

私の問題は、この場合、バインディングのためにセッター setAddress() が呼び出されないことです (デバッガーで確認)。これに対する解決策はありますか?

4

1 に答える 1

2

オプションは次のとおりです。

a) ビジネス オブジェクトに直接バインドしない b) ドメイン オブジェクトへの変換を行うようにバインダーを構成する

討論:

通常、エンタープライズ クラスのソフトウェアでは、ビジネス オブジェクト (通常はエンティティ (jpa のコンテキスト)) に直接バインドしたくありません。これは、セッション処理が非常に難しいためです。通常、DTO に対してコーディングを行い、フロントエンドから DTO を受け取ると、リポジトリ (ORM) 層から適切なオブジェクトを読み取り、それを更新して、再度保存します (最も難しい更新についてのみ説明しました)。 、しかし同様のモデルがすべてに機能します)。

ただし、Spring MVC バインダーは、あらゆるものをあらゆるものにバインドする方法を提供します。それらは少し複雑で、ここで説明するには時間がかかりすぎますが、ドキュメントは春のドキュメントにあり、コンバーターと変換サービスを調べたいと思っています。このトピックに関する SO Q/A があります。たとえば...

于 2015-10-30T18:05:50.277 に答える