如何将其他数据传递给GET子编辑器?

时间:2014-07-29 07:40:23

标签: gwt gwtp

我有这个问题: 我有一个包含子编辑器的PresenterWidget。 这个小部件应该可以编辑“容器”元素。可以将这些容器分配给组。为此,我想从服务器获取所有可用组的列表。所以小部件设置如下(我使用GWTP):

public class ContainerEditorDialogPresenterWidget extends PresenterWidget<ContainerEditorDialogPresenterWidget.MyView> implements
        ContainerEditorDialogUiHandlers {

private final PlaceManager placeManager;
private List<GroupDTO> groupList = new ArrayList<GroupDTO>();
private final DispatchAsync dispatcher;

@Inject
ContainerEditorDialogPresenterWidget(EventBus eventBus,
                           MyView view, PlaceManager placeManager, DispatchAsync dispatcher) {
    super(eventBus, view);
    getView().setUiHandlers(this);
    this.dispatcher = dispatcher;
    fetchGroups();
}
...
public void fetchGroups(){
    FetchGroupsAction action = new FetchGroupsAction();
    dispatcher.execute(action, new AsyncCallbackImpl<FetchGroupsResult>() {
        @Override
        public void onSuccess(FetchGroupsResult result) {
            groupList = result.getGroupDtos();
            eventBus.fireEvent(new GroupListUpdatedEvent(groupList));
        }

    });

}

所以我在构造函数中调用fetchGroups以尽早获取它。因为它是一个AynchCallback,我得到的结果“在某个时间”。然后我尝试使用GroupListUpdatedEvent将值传递给子编辑器。在那里我有一个这样的编辑:

public class GroupListEditor extends Composite implements
        IsEditor<ListEditor<String, GroupItemEditor>> {

    private static StringListEditorUiBinder uiBinder = GWT
            .create(StringListEditorUiBinder.class);

    interface StringListEditorUiBinder extends
            UiBinder<Widget, GroupListEditor> {
    }
    //Gives us access to the event bus. 

    @Inject private EventBus eventBus;
...


    public GroupListEditor() {
         initWidget(uiBinder.createAndBindUi(this));
         eventBus.addHandler(GroupListUpdatedEvent.TYPE, new GroupListUpdatedEvent.GroupListUpdatedHandler() {
            @Override
            public void onGroupListUpdatedEvent(GroupListUpdatedEvent event) { 
                Log.debug("onContainerUpdatedEvent caught");

                allGroups = event.getGroupList();
                if(allGroups != null) {
                    for (GroupDTO g : allGroups) {
                        lbAllGroups.addItem(g.getName(), g.getId().toString());
                    }

                    lbAllGroups.setVisibleItemCount(5);
                    Log.debug("Item list = " + lbAllGroups.getItemCount());
                } else {
                    Log.debug("GROUP LIST is Null!");
                }


            }
        }); 

}

当我尝试注册处理程序时,我得到一个例外。所以我希望eventBus没有正确注入。我想念什么,如果我不在演示者中,我如何使用活动和活动总线? 并且:这是用正确的方式来填充编辑器的“实用程序”数据吗?我想编辑应该直接与他们关心的数据相关联。但是我如何处理这种补充数据?

谢谢:)

1 个答案:

答案 0 :(得分:0)

您在@UiField ContainerEditorDialogPresenterWidgetView中使用GroupListEditor吗? 如果是这样,那么依赖注入将不起作用,因为您基本上手动创建导致GroupListEditor为NULL的EventBus

我也会使用构造函数注入而不是字段注入。

GroupListEditor:

@Inject
public GroupListEditor(EventBus eventBus) {
this.eventBus = eventBus;
}

ContainerEditorDialogPresenterWidgetView:

public class ContainerEditorDialogPresenterWidgetView {

   @UiField(provided=true)
   GroupListEditor groupListEditor;

   @Inject
   public ContainerEditorDialogPresenterWidgetView(GroupListEditor groupListEditor);
      this.groupListEditor = groupListEditor;
      initWidget();
   }
}

或者,您可以直接通过GroupListEditor获取Ginjector的实例。