GWT:在表单中添加SubmitHandler而不考虑逻辑

GWT:在表单中添加SubmitHandler而不考虑逻辑,gwt,mvp,gwtp,gwt-platform,Gwt,Mvp,Gwtp,Gwt Platform,我有一个GWTPPresenterWidget和View对,其中包含一个简单的搜索表单 目前,我正在通过调用我的视图的getSearchForm()方法,将SubmitHandler添加到表单中,这是一种不好的做法,因为它引用的是实际的类而不是接口: public class HeaderPresenter extends PresenterWidget<HeaderPresenter.MyView> { public interface MyView extends Vie

我有一个GWTP
PresenterWidget
View
对,其中包含一个简单的搜索表单

目前,我正在通过调用我的
视图的
getSearchForm()
方法,将
SubmitHandler
添加到表单中,这是一种不好的做法,因为它引用的是实际的类而不是接口:

public class HeaderPresenter extends PresenterWidget<HeaderPresenter.MyView>
{
    public interface MyView extends View
    {
        void submitForm();
        Form getSearchForm();
    }

    // ...omitted for brevity

    @Inject
    public HeaderPresenter(EventBus eventBus, DispatchAsync dispatchAsync, MyView view, PlaceManager placeManager)
    {
         // ...omitted for brevity
    }

    @Override
    protected void onBind()
    {
        super.onBind();         

        getView().getSearchForm().addSubmitHandler(new SubmitHandler()
        {
            @Override
            public void onSubmit(SubmitEvent event)
            {
                // stops the form submission
                event.cancel();

                // now we can do our stuff
                String query = getView().getSearchQuery();

                if(query != "") // don't search for a blank string
                {
                    PlaceRequest request = new PlaceRequest.Builder().nameToken(NameTokens.search).with("q", query).build();
                    placeManager.revealPlace(request);
                }
            }
        });
}
公共类HeaderPresenter扩展PresenterWidget
{
公共接口MyView扩展了视图
{
void submitForm();
表单getSearchForm();
}
//…为简洁起见省略
@注入
公共HeaderPresenter(EventBus EventBus、DispatchAsync DispatchAsync、MyView视图、PlaceManager PlaceManager)
{
//…为简洁起见省略
}
@凌驾
受保护的void onBind()
{
super.onBind();
getView().getSearchForm().addSubmitHandler(新SubmitHandler())
{
@凌驾
提交时公共无效(提交事件)
{
//停止表单提交
event.cancel();
//现在我们可以做我们的事情了
字符串查询=getView().getSearchQuery();
if(query!=“”)//不要搜索空白字符串
{
PlaceRequest request=new PlaceRequest.Builder().nameToken(NameTokens.search).with(“q”,query).build();
placeManager.revealPlace(请求);
}
}
});
}
是否有方法将
提交者添加到
标题呈现者中
,或者我必须将该代码放入
视图中


我希望在演示者中尽可能多地保留逻辑。

我在这里找到了关于这一点的讨论,并最终使用了Thomas Broyer建议的选项4: