2011-12-10 1 views
0

更新中、エディタフレームワークを持つエンティティはdbコールから2回選択します。 エディタフレームワークの機能に問題はありませんか?ここでGWTエディタ:更新前に呼び出しを2回選択します

は、コードスニペットです:

public class UserActivity extends BasicActivity<UserActivity.Display> { 

... 

interface Driver extends RequestFactoryEditorDriver<UserProxy, UserPanel> { 
} 

private UserProxy user; 

private Driver driver; 

@Inject 
private Provider<UserRequestContext> userContextProvider; 

... 

@Inject 
public UserActivity(EventBus eventBus, Display display, PlaceController placeController, WmsRequestFactory requestFactory) { 

    super(display, eventBus, placeController); 

    driver = GWT.create(Driver.class); 
    driver.initialize(requestFactory, (UserPanel) display); 

} 

... 

@Override 
protected void onBind() { 

    UserRequestContext userRequestContext = userContextProvider.get(); 

    userRequestContext.updateUser(user); 

    driver.edit(user, userRequestContext); 

    registerHandler(display.getSaveButton().addClickHandler(
      new ClickHandler() { 
       public void onClick(ClickEvent event) { 

        RequestContext context = driver.flush(); 

        // Check for errors 
        if (driver.hasErrors()) { 
         display.getStatus().setHTML(
           "<b>Errors detected locally</b>"); 
         return; 
        } 

        // Send the request 
        context.fire(); 

       } 
      })); 

    ... 

は出力を休止した後、保存ボタンをクリックした:

[INFO] Hibernate: select user0_.ID as ID1_0_, user0_.CREATED as CREATED1_0_, user0_.MODIFIED as MODIFIED1_0_, user0_.version as version1_0_, user0_.BIRTH_DATE 
as BIRTH5_1_0_, user0_.EMAIL as EMAIL1_0_, user0_.FIRST_NAME as FIRST7_1_0_, user0_.LAST_NAME as LAST8_1_0_, user0_.LOGIN as LOGIN1_0_, user0_.PASSWORD as PASS 
WORD1_0_ from USER user0_ where user0_.ID=? 

[INFO] Hibernate: select user0_.ID as ID1_0_, user0_.CREATED as CREATED1_0_, user0_.MODIFIED as MODIFIED1_0_, user0_.version as version1_0_, user0_.BIRTH_DATE 
as BIRTH5_1_0_, user0_.EMAIL as EMAIL1_0_, user0_.FIRST_NAME as FIRST7_1_0_, user0_.LAST_NAME as LAST8_1_0_, user0_.LOGIN as LOGIN1_0_, user0_.PASSWORD as PASS 
WORD1_0_ from USER user0_ where user0_.ID=? 

[INFO] Hibernate: update USER set MODIFIED=?, version=?, BIRTH_DATE=?, EMAIL=?, FIRST_NAME=?, LAST_NAME=?, LOGIN=?, PASSWORD=? where ID=? and version=? 

それは正常ですか?

答えて

0

はGWT Googleグループに回答:参照と利便性のためにここにコピーhttps://groups.google.com/d/msg/google-web-toolkit/T4N1puddcS4/vV1wYZ6n9EUJ

まず、これはエディタフレームワークとは何の関係もありませんが、RequestFactoryと。

あなたがLocatorを使用していない、またはあなたのLocatorisLive()メソッドをオーバーライドしていない場合、これは正常な動作です:これはRequestFactoryは実体が応答を送信する前に、まだ「生きている」であるか否かを判断する方法ですクライアントに送信します。そうでない場合は、エンティティが削除されたことをクライアントに通知します(EntityProxyChangeイベントをEventBusにWriteOperation.DELETEDでディスパッチします)。 isLive(entity)のデフォルトの実装はfind(entity.get()) != nullであり、これはエンティティのLocatorが存在しない場合にも起こります(違いはLocatorで、isLive()をオーバーライドしてより最適化された実装)。

関連する問題