Корневой центр GWTP из раздела «Начало работы»

#gwt #gwtp

#gwt #gwtp

Вопрос:

Я начинаю работу в https://code.google.com/p/gwt-platform/wiki/GettingStarted#Embedding_a_GWTP_app_in_a_webpage

Некоторые причины, когда я добавляю код для своего RootPresenter:

`

 public class MyRootPresenter extends RootPresenter {

    public static final class MyRootView extends RootView {

        @Override
        public void setInSlot(Object slot, IsWidget widget) {
            RootPanel.get("content").add(widget);
        }

    }

    @Inject
    public MyRootPresenter( EventBus eventBus, MyRootView myRootView ) {
        super( eventBus, myRootView );
    }



}
 

`

приложение будет отображаться только тогда, когда у меня <.. id="content"></ ..> есть правильное. Но когда я добавляю этот элемент и перехожу с одной страницы на другую, он не удаляет старые ведущие из html.

Мой GinInjector:

`

     @GinModules({ MyModule.class })
public interface MyGinjector extends Ginjector {

    PlaceManager getPlaceManager();
    EventBus getEventBus();
    AsyncProvider<MainPagePresenter> getMainPagePresenter();
    AsyncProvider<NextPagePresenter> getNextPagePresenter();


    }
 

`

Мой модуль: `

     public class MyModule extends AbstractPresenterModule {

    @Override
    protected void configure() {  
        // install(new DefaultModule(MyPlaceManager.class));
        install(new CommonGinModule());
        bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
        bind(TokenFormatter.class).to(ParameterTokenFormatter.class).in(Singleton.class);
        bind(RootPresenter.class).to(MyRootPresenter.class).asEagerSingleton();
        bind(PlaceManager.class).to(MyPlaceManager.class).in(Singleton.class);
        bind(GoogleAnalytics.class).to(GoogleAnalyticsImpl.class).in(Singleton.class);

        // Presenters
        bindPresenter(MainPagePresenter.class, 
                MainPagePresenter.MyView.class, 
                MainPageView.class, 
                MainPagePresenter.MyProxy.class
                );
        bindPresenter(NextPagePresenter.class,
                NextPagePresenter.MyNextView.class,
                NextPageView.class,
                NextPagePresenter.MyNextProxy.class);



    }

}
 

`

Mypresenter (другой очень похож на этот): `

 public class MainPagePresenter extends 
Presenter<MainPagePresenter.MyView, MainPagePresenter.MyProxy> {

  public interface MyView extends View {

  }

  @ProxyCodeSplit
  @NameToken("main")
  public interface MyProxy extends ProxyPlace<MainPagePresenter> {}

  @Inject
  public MainPagePresenter(EventBus eventBus, MyView view, MyProxy proxy) {
    super(eventBus, view, proxy);
  }

  @Override
  protected void revealInParent() {
    RevealRootContentEvent.fire( this, this );
  }
}
 

`

И просмотр:

 public class MainPageView extends ViewImpl implements MainPagePresenter.MyView {

      private static String html =
        "<h1>Web Application Starter Project</h1>n"  
        "<table align="center">n"  
        "  <tr>n"  
        "    <td colspan="2" style="font-weight:bold;">Please enter your name:</td>n"  
        "  </tr>n"  
        "  <tr>n"  
        "    <td id="nameFieldContainer"></td>n"  
        "    <td id="sendButtonContainer"></td>n"  
        "  </tr>n"  
        "  <tr>n"  
        "    <td colspan="2" style="color:red;" id="errorLabelContainer"></td>n"  
        "  </tr>n"  
        "</table>n";

      HTMLPanel panel = new HTMLPanel(html);

      @Inject
      public MainPageView(final PlaceManager myPlaceManager) {
        final Button sendButton = new Button("Send");
        final TextBox nameField = new TextBox();
        nameField.setText("GWT User");
        final Label errorLabel = new Label();

        // We can add style names to widgets
        sendButton.addStyleName("sendButton");

        sendButton.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                PlaceRequest request = new PlaceRequest("next");
                myPlaceManager.revealPlace(request);

            }
        });

        // Add the nameField and sendButton to the RootPanel
        // Use RootPanel.get() to get the entire body element
        panel.add(nameField, "nameFieldContainer");
        panel.add(sendButton, "sendButtonContainer");
        panel.add(errorLabel, "errorLabelContainer");
      }

      @Override
      public Widget asWidget() {
        return panel;
      }


}
 

Читая страницу «Начало работы», это должно быть довольно просто. Но каким-то образом это работает неправильно.

Комментарии:

1. content Удаляется ли узел из DOM при переходе между страницами?

2. Нет. На самом деле он начинает показывать две страницы внутри узла содержимого. Меняется только то, что находится сверху 🙂