9

同じモジュールに複数のエントリ ポイントがあります。

たとえば、ホームページ用の Home エントリ ポイントと、管理ページ用の Admin エントリ ポイントがあります。

<entry-point class='com.company.project.client.HomeModule'/> 
<entry-point class='com.company.project.client.AdminModule'/> 

私が今セットアップしている方法 - OnModuleLoad で次のように somt をチェックする必要があります:

if((RootPanel.get("someHomeWidget")!=null)&& 
  (RootPanel.get("someOtherHomeWidget")!=null)) 
{ 
  // do the stuff 
} 

ホームページが開いたときに管理エントリポイントが実行されないようにするためです。

上記のチェックを行わないことには、ホーム ページと管理ページの両方に同じ名前の div がある場合に、挿入するものが何であれ、それぞれに 2 回表示されることも含まれます。

これは 1000 マイルも離れた場所からでも悪臭を放ちますが、これは明らかに間違っています。人々の経験でこれを行う正しい方法は何でしょうか?

どんな助けでも大歓迎です!

4

7 に答える 7

8

正しい方法は、適切なウィジェットを適切な div に固定する、モジュールごとに 1 つのエントリ ポイントを持つことです。

RootPanel panel = RootPanel.get("someHomeWidget");
if (panel) panel.add(new HomeWidget());

panel = RootPanel.get("adminWidget");
if (panel) panel.add(new AdminWidget());

そうすれば、ページをスキャンして div を探し、適切なウィジェットを挿入するだけです。したがって、HTML ページはいつどのウィジェットを表示するかを決定し、GWT コードはあらゆる状況を処理する準備ができています。上記について悪臭を放つものは何もありません。それは、エントリポイントを記述する方法です。

別の方法は、管理領域と通常の領域がまったく異なる場合 (たとえば、それらを別々の時間にロードしたい場合) は、別々のエントリ ポイントを持つ別々のモジュールにする必要があります。

于 2009-05-31T00:27:49.803 に答える
4

また、GWT のおもちゃアプリで複数のページを使用したいと考えていましたが、それを理解したと思います。デプロイメント記述子 (myApp.gwt.xml) をいくらかマッサージする必要がありましたが、私が行ったことは次のとおりです。

  • EntryPoint を実装する別のクラスを作成し、新しいページでのみ div に追加されるコードを追加しました。
  • 元の gwt.xml をコピーし、次の 2 つの点を変更しました。
    • module-rename-to - 「anothergwtapp」に変更しました
    • エントリ ポイントは、新しいクラスを指定しました。
  • プロジェクトをコンパイルすると、「war」フォルダーに (待って...) 「anothergwtapp」という別のディレクトリがあります。GWT マジックである「anothergwtapp.nocache.js」が含まれていました。
  • 最後に、元の HTML ページをコピーし、「stockwatcher/stockwatcher.nocache.js」を「anothergwtapp/anothergwtapp.nocache.js」に置き換えました (はい、私は非常に新しいので、チュートリアルはまだ私のマシンにあります)。
    • 新しい HTML を少し変更して (新しいエントリ ポイントの onload を入力するための新しい div)、最初のページの新しいページに単純な href を追加しました。

出来た。gwt.xml を複製し、モジュールに新しい名前を付けて、新しいアプリ ページに合わせます。他のリンクをいくつか見て、実際に説明されていることを行った可能性がありますが、単語やリダイレクトなどが多すぎました (つまり、実際には何も読んでいませんでした)。私は Galileo 用の最新の GWT プラグインを使用しているので、現在はおそらく IJW です。

于 2009-10-08T04:51:00.873 に答える
1

通常は、EntryPoint を 1 つだけ設定することをお勧めします。1 つのモジュール内の複数の EntryPoint がすべて同時に開始されるため、予期しないことが起こる場合があります。

個別に処理する方法には多くのオプションがあります。 - 管理者用とホーム アプリケーション用の 2 つの異なるコンパイルを用意します。- 履歴トークンを使用して、Admin または Home が必要であることを示します - JS 変数をチェックして、どちらか一方を表示します - 特定の DIV ID の存在をチェックして、Admin または Home を表示します (RootPanel.get(id)) - URL パラメーターを使用しますアプリケーションを示します。- ...など

于 2009-06-12T07:23:36.893 に答える
1

管理ページとホームページを別のページと見なさないでください。ページの概念は GWT には適用されません。単一のページ、つまり単一のエントリポイントしかないからです。異なるページに影響を与えたい場合は、GWT の URL 書き換え機能を使用してください。

異なるエントリポイントを使用したい場合は、上記のコメントで述べたように、異なるモジュールを使用してください。

于 2009-06-01T06:20:17.863 に答える
1

これを実現するための簡単な (トリッキーな) 方法があります。

メインクラスをあなたのエントリーポイントにします。

<module rename-to='gwt'>
  <inherits name='com.google.gwt.user.User'/>
  <entry-point class='com.example.client.Main'/>
  <source path='client'/>
  <source path='shared'/>
</module>;<br/>

ディスパッチャのように機能する Main.java を作成します。

package com.example.client;

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

public class Main implements EntryPoint {

  public void onModuleLoad() {

    String url = Window.Location.getHref();
    if ( url.indexOf("?install")>-1 ) {
      Install install = Install.getInstance();
      RootPanel.get().add(install);      
    else if ( url.indexOf("?admin")>-1 ) {
      Admin admin = Admin.getInstance();
      RootPanel.get().add(admin);    
    } else {
      Application app = Application.getInstance();
      RootPanel.get().add(app);      
    }
  }
}

現在、アプリケーション、管理者、およびインストールのさまざまなクラスが、個別のユニットのように機能します。

たとえば、簡単なインストールを次に示します。

package comexample.client;

import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;

public class Install extends FlowPanel {

  /** Singleton stuff - to access Main from all subclasses! */
  private static Install singelton;
  public static Install getInstance() {
    if (singelton == null) {singelton = new Install();}
    return singelton;
  }

  /** Constructor - called by Main.onModuleLoad() */
  private Install() {
    this.add(new HTML("<h1>Do whatever You have to do!</h1>"));
  }
}

シングルトンのもの (getInstance) は必要ありませんが、大規模なアプリケーションでは非常に便利です。

/war-directory に install および admin という名前のディレクトリを作成し、そのほとんどに次のような HTML ページを作成します。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; URL=/index.html?install">
</head>
<body></body>
</html>

したがって、ユーザーがブラウザをhttp://www.example.com/installに誘導すると、ユーザーはhttp://www.example.com/index?installにリダイレクトされ、index.html は Main.java にバインドされ、ディスパッチされます。リクエストとロードInstall.java

于 2011-12-14T12:29:24.847 に答える
0

私のブログにはこれに対する解決策があります。複数のエントリポイントがあり、URL書き換えを使用するサンプルのMavenプロジェクトをダウンロードできます。ご覧ください:http://zenoconsulting.wikidot.com/blog :16

于 2009-09-10T20:33:50.623 に答える
0

このフレームワークをもう試しましたか? http://gwtmultipage.org/ Claudius

于 2010-08-01T20:56:12.680 に答える