Pregunta

Tengo varios puntos de entrada en el mismo módulo.

Por ejemplo, tengo un punto de entrada principal para la página de inicio y un administrador punto de entrada para la página de administración.

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

La forma en que estoy ahora configuración - Tengo que comprobar SOMT como este en mi OnModuleLoad:

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

Para la administración del Punto de entrada no se ejecutará cuando el hogar Página obtiene abierta y al revés.

Si no lo hace la comprobación anterior también implica que si tengo un div con el mismo nombre, tanto en la página de inicio de administración y lo que yo estoy inyectando en que aparece dos veces en cada uno de ellos.

Esto huele a 1000 millas de distancia y es obviamente erróneo: ¿cuál es la correcta manera de hacer esto en la experiencia de las personas?

Cualquier ayuda apreciada!

¿Fue útil?

Solución

La forma correcta es tener un único punto de entrada por módulo, que se pega de los widgets apropiadas en los divs apropiadas:

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

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

De esta manera sólo se escanea la página en busca de algún DIV que tiene y se inserta el widget apropiado. Por lo que su página HTML determina qué widgets se muestran cuando el código GWT y está listo para manejar cualquier situación. No hay nada acerca de lo anterior que apesta, es la manera como su punto de entrada debe ser escrito.

La alternativa es si su área de administración y, normalmente, área son totalmente diferentes (por ejemplo: usted quiere cargarlos en momentos separados). Entonces deben ser módulos separados, con puntos de entrada separados

Otros consejos

También quería utilizar varias páginas en una aplicación GWT juguete y creo que lo he descubierto. Tomó un poco de masaje del descriptor de despliegue (myApp.gwt.xml), pero esto es lo que hice.

  • Fabricado otra clase que implementa EntryPoint y ha añadido un código que añade a un div sólo en la nueva página.
  • copió el gwt.xml original y cambió dos cosas:
    • El módulo de cambio el nombre a - He cambiado a "anothergwtapp"
    • El punto de entrada especifica la nueva clase.
  • Cuando puedo compilar el proyecto, hay otro directorio en la carpeta de "guerra" llamada (esperar a que ...) "anothergwtapp". Contenía los "anothergwtapp.nocache.js" Esa es la magia de GWT.
  • Por último, he copiado la página HTML original y sustituye los "stockwatcher / stockwatcher.nocache.js" por "anothergwtapp / anothergwtapp.nocache.js" (sí, soy muy nuevo - el tutorial está todavía en mi máquina)
    • He cambiado el nuevo HTML para ser un poco diferente (nuevos divs para el proceso de carga del nuevo punto de entrada para poblar) y añadí a href sencillo de la nueva página en la primera página.

Se trabajó. Sólo duplicar la gwt.xml y proporcionar un nuevo nombre para el módulo para ir junto con la nueva página de la aplicación. Miré a algunos de los otros eslabones y que pude haber hecho realidad lo que fue descrito, pero había demasiadas palabras y redirecciones y tal (es decir, que realmente no leí nada). Estoy usando la última versión del plugin de GWT para Galileo así que tal vez IJWs ahora.

no consideran admin y la página de inicio como diferentes páginas. Concepto de páginas no es aplicable a GWT, ya que sólo hay una página única, es decir, un solo punto de entrada.  Si usted quiere dar efecto de diferentes páginas, a continuación, utilizar la reescritura de URL características de GWT.

Si desea utilizar diferentes puntos de entrada, a continuación, como se ha dicho en el comentario anterior, utilizar diferentes módulos.

Por lo general es mejor tener sólo uno EntryPoint. Múltiples puntos de entrada en un módulo de todos empiezan al mismo tiempo y que a veces pueden hacer cosas que no esperaba.

Usted tiene un montón de opciones en la forma de manejarlo por separado: - Tener 2 compilaciones diferentes uno de administración y otro para la aplicación Home. - Utilizar las fichas de historia para indicar que desea Admin o Inicio - Comprobar una variable JS para mostrar uno o el otro - Verificar la presencia de un DIV ID específico para mostrar Admin o Inicio (RootPanel.get (id)) - Uso parámetros de URL para indicar la aplicación. - etc ...

Hay una manera sencilla (complicado) para lograr esto:

Hacer una clase principal de su punto de entrada.

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

Cree este Main.java para trabajar como un despachador:

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

Ahora la clases diferentes de aplicaciones, administración e instalar funcionar como unidades separadas.

Este es por ejemplo un simple Instalar:

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

No es necesario el material Singleton (getInstance), pero es muy útil en grandes aplicaciones.

Ahora en la guerra-directorio / crear directorios llamados instalar y de administración y en muy de ellos crear una página HTML siguiente:

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

Así que cuando el usuario dirige su Brower a http://www.example.com/install él será redirigido a http://www.example.com/index?install y index.html está obligado a Main.java que transmitirá la solicitud y cargar Install.java

Tengo una solución para esto en mi blog. Puede descargar un proyecto Maven muestra que tiene múltiples puntos de entrada y utiliza la reescritura de URL. Echar un vistazo: http://zenoconsulting.wikidot.com/blog:16

¿Usted intentó este marco todavía? http://gwtmultipage.org/ Claudio

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top