Frage

Ich habe mehrere Einstiegspunkte im selben Modul.

Zum Beispiel habe ich einen Heimeinstiegspunkt für die Homepage und ein Admin Einstiegspunkt für die Admin-Seite.

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

So wie ich das Setup jetzt bin - ich brauche wie dies zu überprüfen SOMT in meinem OnModuleLoad:

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

, um die die Admin Entry nicht ausgeführt werden, wenn die Startseite Seite geöffnet wird, und umgekehrt.

Nicht die Kontrolle über auch tun beinhaltet, dass, wenn ich ein div mit der gleiche Namen in der Heimat- und Admin-Seite, was ich bin Injektion in es zeigt auf jeden von ihnen zweimal auf.

Das stinkt 1000 Meilen entfernt und ist offensichtlich falsch: Was ist die richtige Weg, dies in Menschen Erfahrung zu tun?

Jede Hilfe dankbar!

War es hilfreich?

Lösung

Der richtige Weg ist eine einzige Anlaufstelle pro Modul haben, dass die entsprechenden Widgets in der entsprechenden divs-Sticks:

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

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

Auf diese Weise scannt nur die Seite für alle divs suchen Sie haben und fügt das entsprechende Widget. So Ihre HTML-Seite bestimmt, welche Widgets angezeigt werden, wenn und der GWT-Code ist bereit, jede Situation zu bewältigen. Es gibt nichts, über das über diesen stinkt, es ist die Art und Weise Ihres Eintrittspunkt geschrieben werden soll.

Die Alternative ist, wenn Ihr Admin-Bereich und in der Regel Bereich total unterschiedlich ist (zB: Sie wollen, dass sie zu unterschiedlichen Zeiten laden). Dann sollten sie separate Module sein, mit separatem Eingang Punkten

Andere Tipps

Ich wollte auch mehrere Seiten in einem GWT Spielzeug App und ich glaube, ich es herausgefunden verwenden. Es dauerte einige Massieren des Deployment Descriptor (myApp.gwt.xml), aber hier ist das, was ich getan habe.

  • eine weitere Klasse Umsetzung Entrypoint gemacht und hinzugefügt einige Codes, der zu einem div in der neuen Seite nur hinzugefügt.
  • Kopiert die ursprüngliche gwt.xml und geändert zwei Dinge:
    • Das Modul-umbenennen-to - ich auf "anothergwtapp"
    • Der Einstiegspunkt die neue Klasse angegeben.
  • Wenn ich das Projekt zu kompilieren, gibt es ein anderes Verzeichnis im „Krieg“ Ordner mit dem Namen (warten, bis es ...) „anothergwtapp“. Es enthielt die „anothergwtapp.nocache.js“, dass die GWT Magie.
  • Schließlich kopierte ich die ursprüngliche HTML-Seite und ersetzt die „stockwatcher / stockwatcher.nocache.js“ mit „anothergwtapp / anothergwtapp.nocache.js“ (ja, ich bin sehr neu - das Tutorial ist noch auf meinem Rechner)
    • änderte ich den neuen HTML ein wenig anders (neu divs für den neuen onload des Einstiegspunktes zu füllen) zu sein, und ich fügte eine einfache href auf die neue Seite in der ersten Seite.

Es funktionierte. Gerade die gwt.xml duplizieren und einen neuen Namen sorgt für das Modul mit der neuen App-Seite zu gehen. Ich sah einige der anderen Links auf und ich habe tatsächlich getan, was beschrieben wurde, aber es gab zu viele Worte und Umleitungen und so (das heißt ich nicht wirklich etwas gelesen hat). Ich bin mit der neuesten GWT-Plugin für Galileo so vielleicht IJWs jetzt.

Dont Admin und Homepage als verschiedene Seiten betrachten. Konzept der Seiten ist nicht anwendbar auf GWT, da es nur eine einzige Seite, dh einzelnen Einstiegspunkt ist.  Wenn Sie Effekt von verschiedenen Seiten geben wollen, dann verwenden Sie URL-Funktionen von GWT neu zu schreiben.

Wenn Sie verschiedene Einstiegspunkte verwenden wollen, dann wie gesagt in obigem Kommentar, verwenden verschiedene Module.

Es ist in der Regel besser, nur ein Entrypoint zu haben. Mehrere Einstiegspunkte in einem Modul starten alle zur gleichen Zeit und das kann manchmal tun Dinge, die man nicht erwartet hat.

Sie haben viele Möglichkeiten, wie sie separat zu behandeln: Habe 2 verschiedene Compilations einen für Admin und einen für die Heimanwendung -. - Verwenden Sie die Geschichte Tokens, um anzuzeigen, dass Sie Admin oder Startseite wollen - Überprüfen Sie eine JS-Variable eine oder das andere zu zeigen, - das Vorhandensein eines bestimmten DIV id überprüfen Admin oder Start (RootPanel.get (id)) zu zeigen, - Verwenden Sie URL-Parameter die Anwendung anzuzeigen. - ... etc

Es gibt einen einfachen (tricky) Weg, dies zu erreichen:

Machen Sie

einen Hauptklasse Ihren Einstiegspunkt.

<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/>

Erstellen Sie diese Main.java wie ein Dispatcher zu arbeiten:

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);      
    }
  }
}

Nun wird die verschiedenen Klassen Anwendung, Admin und Installieren arbeiten wie separate Einheiten.

Hier ist zum Beispiel eine einfache Installation:

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>"));
  }
}

Sie brauchen nicht die Singleton Sachen (getInstance), aber es ist sehr praktisch in großen Anwendungen.

Jetzt im / Kriegs Verzeichnis Verzeichnisse genannt installieren und admin und in sehr von ihnen eine HTML-Seite wie folgt erstellen:

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

So, wenn der Benutzer richtet seine Brower an http://www.example.com/install er werden umgeleitet zu werden http://www.example.com/index?install und index.html an Main.java gebunden, welche die Anforderung und laden Install.java

versenden

Ich habe eine Lösung für diese auf meinem Blog. Sie können eine Probe Maven Projekt herunterladen, die mehrere Einstiegspunkte und verwendet url-Umschreiben hat. Werfen Sie einen Blick: http://zenoconsulting.wikidot.com/blog:16

Haben Sie diesen Rahmen versuchen noch? http://gwtmultipage.org/ Claudius

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top