Domanda

ho più punti di ingresso nello stesso modulo.

Per esempio io ho un punto di ingresso casa per la home page e un Admin punto di ingresso per la pagina di amministrazione.

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

Il modo in cui sono messa a punto ora - ho bisogno di controllare somt come questo nel mio OnModuleLoad:

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

al fine di non il l'Entrypoint Admin da eseguire quando la casa pagina ottiene aperto e viceversa.

Non fare il controllo coinvolge sopra, inoltre, che se ho un div con il stesso nome sia nella home page e Admin qualunque cosa stia iniettando in si presenta due volte su ciascuno di essi.

Questa puzza 1000 miglia di distanza ed è ovviamente sbagliato: qual è la corretta modo per fare questo nelle persone esperienza?

Qualsiasi aiuto apprezzato!

È stato utile?

Soluzione

Il modo corretto è quello di avere un unico punto di ingresso per modulo, che attacca i widget appropriati nelle div appropriate:

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

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

In questo modo solo scansione della pagina alla ricerca di eventuali div che avete e inserisce il widget appropriato. Così la vostra pagina HTML determina ciò che i widget vengono visualizzati quando e il codice GWT è pronto a gestire qualsiasi situazione. Non c'è niente di quanto precede che puzza, è il modo in cui il punto di ingresso deve essere scritto.

L'alternativa è che se la vostra area di amministrazione e normalmente zona sono totalmente diversi (ad esempio: si desidera caricare loro, a volte separati). Allora dovrebbero essere moduli separati, con punti di ingresso separati

Altri suggerimenti

Inoltre ho voluto usare più pagine in un giocattolo applicazione GWT e penso di aver capito. C'è voluto del massaggio del descrittore di deployment (myApp.gwt.xml), ma ecco quello che ho fatto.

  • fatto un'altra classe che implementa EntryPoint e ha aggiunto un po 'di codice che aggiunto a un div solo nella nuova pagina.
  • copiato le gwt.xml originale e cambiato due cose:
    • Il modulo-rinominare-to - ho cambiato a "anothergwtapp"
    • Il punto di ingresso specificata la nuova classe.
  • Quando compilo il progetto, v'è un'altra directory nella cartella "guerra" chiamato (attendere che si ...) "anothergwtapp". Conteneva le "anothergwtapp.nocache.js" che è la magia GWT.
  • Infine, ho copiato la pagina HTML originale e sostituito i "stockwatcher / stockwatcher.nocache.js" con "anothergwtapp / anothergwtapp.nocache.js" (sì, sono molto nuovo - il tutorial è ancora sulla mia macchina)
    • Ho cambiato il nuovo HTML di essere un po 'diverso (nuove div per onload del nuovo punto di ingresso per popolare) ed ho aggiunto un semplice href alla nuova pagina nella prima pagina.

Ha funzionato. Basta duplicare il gwt.xml e fornire un nuovo nome per il modulo di andare avanti con la nuova pagina app. Ho guardato alcuni degli altri collegamenti e forse ho effettivamente fatto ciò che è stato descritto, ma c'erano troppe parole e reindirizzamenti e tale (vale a dire non ho davvero letto niente). Sto usando l'ultimo plugin GWT per Galileo così forse IJWs ora.

Non considerare Admin e home page pagine diverse. Concetto di pagine non è applicabile a GWT, in quanto v'è solo una singola pagina, cioè singola entrypoint.  Se si vuole dare l'effetto di diverse pagine, quindi utilizzare la riscrittura degli URL caratteristiche di GWT.

Se si desidera utilizzare diversi entrypoints, poi come detto nel commento di cui sopra, utilizzare diversi moduli.

E 'solito è meglio avere un solo EntryPoint. Più entrypoints in un modulo tutti partono allo stesso tempo e che a volte possono fare cose che non aspetta.

Hai un sacco di opzioni in come gestire separatamente: - Avere 2 compilation differenti una per Admin e una per l'applicazione Home. - Utilizzare i gettoni di storia per indicare che si desidera Admin o casa - Controllare una variabile JS per mostrare uno o l'altro - Verificare la presenza di uno specifico ID DIV per mostrare Admin o domicilio (RootPanel.get (id)) - Utilizzare i parametri URL per indicare l'applicazione. - ... etc

C'è un modo semplice (difficile) per raggiungere questo obiettivo:

fare una classe principale tuo punto di ingresso.

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

Creare questo Main.java a lavorare come un dispatcher:

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

Ora le diverse classi di applicazioni, Admin e Installa lavorare come unità separate.

Ecco ad esempio un semplice Installare:

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

Non è necessario la roba Singleton (getInstance), ma è molto utile nelle grandi applicazioni.

Ora, nella / dalla guerra directory creare directory di nome installare e admin e molto di esse creare una pagina HTML in questo modo:

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

Così, quando l'utente dirige il suo Brower a http://www.example.com/install lui verrà reindirizzato al http://www.example.com/index?install e index.html è destinata a Main.java che inviare la richiesta e caricare Install.java

ho una soluzione per questo sul mio blog. È possibile scaricare un progetto Maven di esempio che dispone di più punti di ingresso e usa url-rewriting. Date un'occhiata: http://zenoconsulting.wikidot.com/blog:16

Hai provato ancora questo quadro? http://gwtmultipage.org/ Claudio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top