3

私は新しいRequestFactory APIのコツをつかもうとしていて、本当に苦労しています。

私のドメイン モデルは、Staffer、 、Personおよび で構成されていOfficeます。Staffer にはフィールドとして Person と Office があります。

GWT で Staffer インスタンスに更新を保存しようとすると、サーバー側の呼び出しでプリミティブ/文字列フィールドに更新が表示されますが、アタッチされたまたはオブジェクトpersist()への更新は表示されません。GWT 側で編集に影響を与える方法は次のとおりです。PersonOffice

private void persistStafferDetails()
{
    CRMRequestFactory.StafferRequest stafferRequest = requestFactory.stafferRequest();
    staffer = stafferRequest.edit(staffer);

    PersonProxy person = staffer.getPerson();
    person.setFirstName(firstNameField.getText());
    person.setLastName(lastNameField.getText());

    staffer.setPersonalEmail(personalEmailField.getText());
    staffer.getHomeLocation().setStreetAddress(addressField1.getText());
    staffer.getHomeLocation().setCity(cityField.getText());
    staffer.getHomeLocation().setPostalCode(postalField.getText());
    staffer.getHomeLocation().setProvince(provinceDropDown.getValue(provinceDropDown.getSelectedIndex()));

    stafferRequest.persist().using(staffer).fire();
}

プロキシは次のとおりです。

@ProxyFor(Staffer.class)
public interface StafferProxy extends EntityProxy
{
    Long getId();

    PersonProxy getPerson();
    void setPerson(PersonProxy person);

    OfficeProxy getOffice();
    void setOffice(OfficeProxy office);

    String getHomePhone();
    void setHomePhone(String homePhone);

    String getCellPhone();
    void setCellPhone(String cellPhone);

    String getPersonalEmail();
    void setPersonalEmail(String personalEmail);

    LocationProxy getHomeLocation();
    void setHomeLocation(LocationProxy homeLocation);
}

@ProxyFor(Person.class)
public interface PersonProxy extends EntityProxy
{
    Long getId();
    void setId(Long id);

    String getFirstName();
    void setFirstName(String firstName);

    String getLastName();
    void setLastName(String lastName);
}


@ProxyFor(Office.class)
public interface OfficeProxy extends EntityProxy
{
    Long getId();

    String getName();
    void setName(String name);
}

私の CRMRequestFactory は次のようになります。

public interface CRMRequestFactory extends RequestFactory
{
  @Service(Staffer.class)
    public interface StafferRequest extends RequestContext
    {
        InstanceRequest<StafferProxy, Void> persist();
        Request<List<StafferProxy>> getAll();
        Request<StafferProxy> findStaffer(Long id);
    }
    public StafferRequest stafferRequest();

    @Service(Person.class)
    public interface PersonRequest extends RequestContext
    {
        InstanceRequest<PersonProxy, Void> persist();
        Request<List<PersonProxy>> getAll();
        Request<PersonProxy> findPerson(Long id);
    }
    public PersonRequest personRequest();

    @Service(Office.class)
    public interface OfficeRequest extends RequestContext
    {
        InstanceRequest<OfficeProxy, Void> persist();
        Request<List<OfficeProxy>> getAll();
        Request<OfficeProxy> findOffice(Long id);
    }
    public OfficeRequest officeRequest();

}
4

1 に答える 1

3

RequestFactory はメソッドを特別なものとして扱わないため、persist()チェーン化された永続化を独自に実装するか、ORM システムを構成してそれを実行する必要があります。もう 1 つの確認事項は、メソッドfindPerson()findOffice()メソッドが複数回呼び出された場合に、Person または Office オブジェクトの同じオブジェクト インスタンスを返すことです。着信 HTTP 要求の存続期間全体にわたって同じEntityManager(またはシステムの同等のもの) を使用すると、通常、重要なペイロード グラフでの「更新の欠落」の問題が解決されます。

連鎖持続性に関するブログ投稿と、短い議論を含む課題トラッカーリンク

これで問題が解決しない場合は、ドメイン オブジェクトfindFoo()persist()メソッドの例を投稿していただけますか?

于 2011-02-12T15:46:41.197 に答える