Pergunta

Eu tenho múltiplos pontos de entrada no mesmo módulo.

Por exemplo, eu tenho um ponto de entrada inicial para a home page e um Admin ponto de entrada para a página de administração.

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

A maneira Estou configuração agora - Eu preciso verificar SOMT como este em minha OnModuleLoad:

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

no fim do Admin EntryPoint para não ser executado quando o Início página fica aberto eo outro em torno caminho.

Não fazer a verificação acima também envolve que se eu tiver um div com o mesmo nome, tanto na página inicial e Admin tudo o que eu estou injetando em ele mostra-se duas vezes em cada um deles.

isso fede 1000 milhas de distância e é obviamente errado: o que é o correto maneira de fazer isso na experiência de pessoas?

Qualquer ajuda apreciada!

Foi útil?

Solução

O caminho correto é ter um único ponto de entrada por módulo, que sticks os widgets apropriados nos divs apropriados:

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

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

Dessa forma, ele só digitaliza a página à procura de qualquer divs que você tem e insere o widget apropriado. Então sua página HTML determina o que os widgets são exibidos quando eo código GWT está pronto para lidar com qualquer situação. Não há nada sobre o acima que fede, é a forma como o ponto de entrada deve ser escrito.

A alternativa é se a sua área de administração e, normalmente, área são totalmente diferentes (por exemplo: você quer carregá-los em momentos diferentes). Então eles devem ser módulos separados, com pontos de entrada separados

Outras dicas

Eu também queria usar várias páginas em um aplicativo de brinquedo GWT e eu acho que eu percebi isso. Demorou algum massagem do descritor de implementação (myApp.gwt.xml), mas aqui está o que eu fiz.

  • Made outra classe que implementa EntryPoint e acrescentou um código que adicionado a uma div apenas na nova página.
  • copiou o gwt.xml original e mudou duas coisas:
    • O módulo-rename-to - I alterado para "anothergwtapp"
    • O ponto de entrada especificado a nova classe.
  • Quando eu compilar o projeto, há um outro diretório na pasta "guerra" chamado (espera para ela ...) "anothergwtapp". Continha os "anothergwtapp.nocache.js" Essa é a magia GWT.
  • Finalmente, eu copiei a página HTML original e substituiu os "stockwatcher / stockwatcher.nocache.js" com "anothergwtapp / anothergwtapp.nocache.js" (sim, eu sou muito novo - o tutorial ainda está na minha máquina)
    • Eu mudei o novo HTML para ser um pouco diferente (novas divs para onload do novo ponto de entrada para preencher) e acrescentei a href simples para a nova página na primeira página.

Ele trabalhou. Apenas duplicar o gwt.xml e fornecer um novo nome para o módulo para ir junto com a nova página do aplicativo. Eu olhei para alguns dos outros links e eu pode realmente ter feito o que foi descrito, mas havia muitas palavras e redirecionamentos e (qualquer coisa ou seja, eu realmente não ler) tal. Eu estou usando a última versão do plugin GWT para o Galileo então talvez IJWs agora.

Não considerar Administração e home page como páginas diferentes. Conceito de páginas não é aplicável a GWT, como há apenas uma única página, ou seja, único ponto de entrada. Se você quer dar efeito de diferentes páginas, em seguida, usar URL reescrever características do GWT.

Se você quiser usar diferentes pontos de entrada, em seguida, como disse no comentário acima, use módulos diferentes.

Geralmente é melhor ter apenas um EntryPoint. Vários pontos de entrada em um módulo todos começam ao mesmo tempo e que pode, por vezes, fazer coisas que você não esperava.

Você tem muitas opções em como lidar com ele separadamente: - Tenha 2 compilações diferentes uma para Administrador e outra para a aplicação inicial. - Use a história fichas para indicar que você deseja Admin ou Início - Verificar uma variável JS para mostrar um ou outro - Verifique a presença de um ID específico DIV para mostrar Admin ou Home (RootPanel.get (id)) - Use URL parâmetros para indicar a aplicação. - ... etc

Há uma maneira simples (complicado) para alcançar este:

Faça uma classe principal Seu ponto 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/>

Crie este Main.java ao trabalho como um expedidor:

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

Agora as diferentes classes de aplicações, de administrador e instalar funcionam como unidades separadas.

Aqui está, por exemplo, uma instalação simples:

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

Você não precisa o material Singleton (getInstance), mas é muito útil em grandes aplicações.

Agora na guerra-diretório / criar diretórios nomeados instalar e admin e em muito deles criar uma página HTML como esta:

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

Assim, quando o usuário dirige seu Brower para http://www.example.com/install ele será redirecionado para http://www.example.com/index?install e index.html é obrigado a Main.java que irá despachar o pedido e carregar Install.java

Eu tenho uma solução para isso no meu blog. Você pode baixar um projeto Maven amostra que tem vários pontos de entrada e usos url-reescrita. Dê uma olhada: http://zenoconsulting.wikidot.com/blog:16

Você tentou este quadro ainda? http://gwtmultipage.org/ Claudius

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top