GWT - Как получить значение и решить, какую страницу загрузить - PullRequest
2 голосов
/ 20 ноября 2010

Мне нужно знать (используя GWT) стратегию загрузки некоторого класса вместо других в соответствии со значением HTTP GET.

Пример:

// Main.gwt.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">

<module>
    <inherits name="com.google.gwt.user.User"/>
    <entry-point class="org.sinfonet.client.PageLoader"/>
</module>

// PageLoader
package org.sinfonet.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.RootPanel;

public class PageLoader implements EntryPoint {
    public void onModuleLoad() {
        FlowPanel pageloader=new FlowPanel();
        pageloader.add(new MainHomePage());
        RootPanel.get().add(pageloader);
    }
}

Если мой GET is <a href="http://localhost:8084/GWT/index.html" rel="nofollow noreferrer">http://localhost:8084/GWT/index.html</a>, я хотел бы загрузить MainHomePage();

Иначе, если мой GET равен <a href="http://localhost:8084/GWT/index.html?page=2" rel="nofollow noreferrer">http://localhost:8084/GWT/index.html?page=2</a>, я хотел бы загрузить MainAnotherClass();

Мне нужнореализовать это в классе PageLoader, в XML или где?Я думаю о xml, потому что PageLoader - это класс на стороне клиента ... здесь невозможно принять решение.

PS Я хочу загрузить другую страницу (псевдоним, другой основной класс), а не загружать ее*. динамически,К сожалению, что-то не так, потому что он вызывает метод .clear(), но он не добавляет мой новый контейнер.Вот код:

public class PageLoader implements EntryPoint, ValueChangeHandler<String> {
    private FlowPanel pageloader;
    private GWTServiceAsync rpcService;

    public void onModuleLoad() {
        pageloader=new FlowPanel();
        rpcService=GWT.create(GWTService.class);
        pageloader.add(new HomepageContext(rpcService));
        RootPanel.get().add(pageloader);

        History.addValueChangeHandler(this);
        if(!History.getToken().isEmpty()){
            changePage(History.getToken());
        }
    }

    public void onValueChange(ValueChangeEvent event) {
        changePage(History.getToken());
    }

    public void changePage(String token) {
        if(History.getToken().equals("apartment")) {
            pageloader.clear();
            pageloader.add(new ApartmentContext(rpcService));
        } else {
            pageloader.clear();
            pageloader.add(new HomepageContext(rpcService));
        }
    }    
}

Что не так?

Ответы [ 2 ]

3 голосов
/ 20 ноября 2010

Я думаю, вы захотите реализовать ValueChangeHandler и работать с History (History.addValueChangeHandler (changeHandler).

затем в вашей реализации valuechangehandler вы можете получить запрошенный токен и выбрать, какое представление показать.

надеюсь, это поможет:)

2 голосов
/ 20 ноября 2010

Для этого вы должны сначала добавить сервлет (вместо статической html-страницы) для обслуживания вашего приложения gwt.

Первым шагом может быть просто добавление сервлета, который возвращает текущую статическую HTML-страницу с gwt iframe. Вы также должны изменить свой web.xml.

Второй шаг - изменить возвращенный html в соответствии с URL, чтобы показать один модуль gwt или другой. Это единственное решение, если вы хотите показать 2 разных приложения gwt (также известные как модули) в соответствии с URL.

В любом случае, если я понял ваш вопрос, вам нужно просто показать разные данные с помощью URL, для этого я рекомендую другое решение: используйте знак #.

С GWT очень легко показывать разные страницы (внутри одного модуля GWT) с этим синтаксисом. http://localhost:8084/GWT/index.html http://localhost:8084/GWT/index.html#page=2 http://localhost:8084/GWT/index.html#searchFor=foo и т.д.

искать события и историю в документации GWT. Это также очень хорошая отправная точка для получения RESTish URL: http://code.google.com/webtoolkit/articles/mvp-architecture.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...