Question

J'ai plusieurs points d'entrée dans le même module.

Par exemple, j'ai un point d'entrée à la maison pour la page d'accueil et un administrateur point d'entrée pour la page d'administration.

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

La façon dont je suis maintenant configuré - Je dois vérifier SOMT comme ça dans mon OnModuleLoad:

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

pour le Admin Entrypoint ne pas être exécuté lorsque la maison la page ouverte et obtient l'inverse.

Ne pas faire le chèque ci-dessus implique aussi que si j'ai un div avec la même nom dans la page d'accueil et d'administration tout ce que je suis en injectais il apparaît deux fois sur chacun d'eux.

pue loin et est évidemment faux 1000 miles: quel est le bon façon de le faire dans l'expérience des gens?

Toute aide appréciée!

Était-ce utile?

La solution

La manière correcte est d'avoir un point d'entrée unique pour chaque module, qui colle les widgets appropriés dans les divs appropriés:

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

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

De cette façon juste scanne la page à la recherche de tout que vous avez divs et insère le widget approprié. Ainsi, votre page HTML détermine les widgets sont affichés quand et le code GWT est prêt à gérer toute situation. Il n'y a rien au sujet de ce qui précède que pue, c'est la façon dont votre point d'entrée doit être écrit.

L'alternative est de savoir si votre zone d'administration et normalement zone sont totalement différents (par exemple: vous voulez les charger à des moments différents). Alors ils devraient être des modules séparés, avec des points d'entrée séparés

Autres conseils

Je voulais aussi utiliser plusieurs pages dans une application de jouets GWT et je pense que je compris. Il a fallu un certain massant du descripteur de déploiement (myApp.gwt.xml), mais voici ce que je faisais.

  • a fait une autre classe qui implémente EntryPoint et a ajouté un code qui a ajouté à un div que dans la nouvelle page.
  • Copié le gwt.xml original et changé deux choses:
    • Le module Rename-à - j'ai changé pour "anothergwtapp"
    • Le point d'entrée spécifié la nouvelle classe.
  • Quand je compilez le projet, il y a un autre répertoire dans le dossier « guerre » appelé (l'attendre ...) « anothergwtapp ». Il contenait les « anothergwtapp.nocache.js » qui est la magie GWT.
  • Enfin, je copiais la page HTML et orginal remplacé les « stockwatcher / stockwatcher.nocache.js » avec « anothergwtapp / anothergwtapp.nocache.js » (oui, je suis très nouveau - le tutoriel est toujours sur ma machine)
    • J'ai changé le nouveau HTML pour être un peu différent (nouveaux divs pour le onload du nouveau point d'entrée pour alimenter) et j'ajouté simple href à la nouvelle page dans la première page.

Il a travaillé. Il suffit de dupliquer le gwt.xml et de fournir un nouveau nom pour le module à aller de pair avec la nouvelle page de l'application. Je regardais quelques-uns des autres liens et je l'ai vraiment fait ce qui a été décrit, mais il y avait trop de mots et réoriente et autres (à savoir que je ne l'ai pas vraiment lu quoi que ce soit). J'utilise le dernier plugin GWT pour Galileo alors peut-être IJWs maintenant.

Ne pas considérer administration et la page d'accueil de différentes pages. Concept de pages ne sont pas applicables à GWT, comme il n'y a qu'une seule page, ce simple point d'entrée.  Si vous voulez donner effet des différentes pages, puis utilisez des fonctionnalités de réécriture d'URL de GWT.

Si vous souhaitez utiliser différents points d'entrée, puis comme dit dans le commentaire ci-dessus, utilisez différents modules.

Il est généralement préférable d'avoir seulement un EntryPoint. Plusieurs points d'entrée dans un module commencent tous en même temps et qui peut parfois faire des choses que vous ne soupçonniez pas.

Vous avez beaucoup d'options sur la façon de gérer séparément: - Avoir 2 compilations différentes pour un administrateur et un pour l'application de la maison. - Utilisez les jetons d'histoire pour indiquer que vous voulez Admin ou Accueil - Vérifier une variable JS pour afficher un ou l'autre - Vérifier la présence d'un identifiant DIV spécifique à afficher Administrateur ou Home (RootPanel.get (id)) - Paramètres d'URL Utilisez pour indiquer l'application. - ... etc

Il y a un moyen simple (difficile) pour y parvenir:

Faire une classe principale Votre point d'entrée.

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

Créer ce Main.java à travailler comme un répartiteur:

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

Maintenant les différentes classes d'application, Admin et installer travailler comme des unités séparées.

Voici par exemple une installation simple:

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

Vous n'avez pas besoin les choses Singleton (getInstance), mais il est très pratique dans les grandes applications.

dans le répertoire / guerre répertoire créer des répertoires nommés et installer admin et en même de les créer une page HTML comme ceci:

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

Ainsi, lorsque l'utilisateur dirige son Brower http://www.example.com/install il seront redirigés vers http://www.example.com/index?install et index.html est lié à Main.java, transmettra la demande et la charge Install.java

J'ai une solution pour cela sur mon blog. Vous pouvez télécharger un projet Maven échantillon qui a plusieurs points d'entrée et utilise url-rewriting. Jetez un oeil: http://zenoconsulting.wikidot.com/blog:16

Avez-vous essayé encore ce cadre? http://gwtmultipage.org/ Claudius

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top