0

ログインページとメインページがあります。ログイン後、私は

    public void onSuccess(String result) {
        // go to the next page
        SDM_Mailer page = new SDM_Mailer();
        RootPanel.get().remove(0);
        RootPanel.get().add(page);
    }

ただし、RootPanel は EntryPoint オブジェクトを受け入れません! add() はウィジェットのみを受け入れます! わかりましたので、ウィジェットを拡張します

public class SDM_Mailer extends Widget implement EntryPoint {

しかし、GWT Designer で SDM_Mailer を編集しようとすると、次のエラーが発生します。

イムグル

では、すべてが同じ巨大なクラス ファイルにない、またはタブを使用していない複数のページを正確に作成するにはどうすればよいでしょうか。以前にこれを行ったことは知っていますが、覚えていませんし、古いバージョンを使用していました。

4

4 に答える 4

0

通常EntryPoint、そこから 1 つだけを使用して、さまざまなウィジェット (さまざまなページを表すことができます) を追加して、それらを管理します。

.setVisible(true)これを行うための非常に簡単な方法は、小さなアプリがページを表すさまざまなウィジェットを使用できるようにすることですがsetVisible(false)、これは長期的には良い方法ではありません。

また、表示したいウィジェットを追加し、新しいウィジェットを入れたいときにそれをクリアするコンテナ ウィジェットを作成することもできます。

container.clear();
container.add(widget)

上記の提案は小さなアプリには問題ありませんが、アプリに多くのページ (ビュー) がある場合には適していません。ページ (ビュー) を管理する一般的な方法は、MVP のアクティビティと場所を使用することです。オーバーヘッドは大きいですが、スケーラブルでうまく機能します。

于 2013-09-30T19:06:27.390 に答える
0

Widget を拡張しても、魔法のように何かを HTML で表現できるようになるわけではありません。ウィジェットは、HTML で何かのグラフィック表現を提供します。つまり、ウィジェット自体を HTML にレンダリングする方法です。これは通常、 UIBinders を実装することによって実現されます。MVP アプローチを採用し、Activity、Places、および Views を使用することを強くお勧めします。方法については公式ドキュメントを確認してください。思ったより簡単です。

Eclipse を使用している場合、GWT プラグインがボイラープレートのほとんどを実行します。使い方はこちらの動画でご覧いただけます。

于 2013-10-01T12:47:27.130 に答える
-2

これは私がやったことです:

package com.example.client;

import java.util.logging.Logger;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.RootPanel;

public class Controller implements EntryPoint {
    private static Controller instance;
    private static final Logger log = Logger.getLogger(Controller.class.getName());

    // I have a feeling GWT does not respect private constructors, or else it uses some other voodoo.
    private Controller(){}

    public static Controller getInstance() {
        if (instance == null) instance = new Controller();
        return instance;
    }

    @Override
    public void onModuleLoad() {
        String token = History.getToken();
        log.info("****************************** token:"+token);
        History.addValueChangeHandler(new ValueChangeHandler<String>() {
            @Override
            public void onValueChange(ValueChangeEvent<String> event) {
                navigate(event.getValue());
            } // onValueChange
        });
        if (token == null || token.length() == 0) History.newItem(Login.TOKEN); // no token
        else navigate(token); // restore app state
    }

    private static void navigate(String token) {
        RootPanel rootPanel = RootPanel.get("gwtApp");
        if (rootPanel.getWidgetCount() > 0) rootPanel.remove(0); // clear the page

        if (Login.TOKEN.equals(token)) {
            Login page = Login.getInstance();
            page.onModuleLoad();
        } else if (MainApp.TOKEN.equals(token)) {
            MainApp page = MainApp.getInstance();
            page.onModuleLoad(); // display the page
//          page.setAuthenticated(true);
//          page.setUsername(email);
        }

    }

} // Controller

*.gwt.xml ファイルで:

<entry-point class='com.example.client.Controller' /> 

新しいページに移動したい場合:

History.newItem(Login.TOKEN);

これはよく知られているようで、おそらく数年前に私が思いついたものです。

于 2013-10-04T21:36:43.197 に答える