2016-10-21 1 views
0

J'utilise GWT Java et j'essaie de supprimer le bouton PayPal Donate (c'est-à-dire, effacer le RootPanel), qui fait partie d'un formulaire HTML, quand je me déplace du LoginView à une autre vue. J'ai trouvé que je devrais utiliser:Comment effacer le RootPanel avant d'afficher la vue suivante

RootPanel.get("payPalDonate").clear(); 
    RootPanel.get().clear(); 
    RootPanel.get().getElement().setInnerHTML(""); 

Cela efface le formulaire afin qu'il n'apparaisse pas sur la vue suivante; cependant, lorsque la vue suivante est affichée, les boutons, les hyperliens et le bouton de retour du navigateur sur la vue ne fonctionnent pas.

Le code est dans le:

private void checkWithServerIfSessionIdIsStillLegal(String sessionID) { 

    rpc = (DBConnectionAsync) GWT.create(DBConnection.class); 
    ServiceDefTarget target = (ServiceDefTarget) rpc; 
    String moduleRelativeURL = GWT.getModuleBaseURL() + "MySQLConnection"; 
    target.setServiceEntryPoint(moduleRelativeURL); 

    AsyncCallback<Account> callback = new AuthenticationHandler<Account>(); 
    rpc.loginFromSessionServer(callback); 
} 

class AuthenticationHandler<T> implements AsyncCallback<Account> { 
    @Override 
    public void onFailure(Throwable caught) { 
     RootPanel.get().add(new LoginView()); 
    } 

    @Override 
    public void onSuccess(Account result) { 
     if (result == null) { 
      RootPanel.get().add(new LoginView()); 
     } else { 
      //if (result.getLoggedIn()) { 
       RootPanel.get().clear(); 
       //RootPanel.get().add(new SelectPersonView()); 
       RootPanel.get().add(new LoginView()); 
      //} else { 
       //RootPanel.get().add(new LoginView()); 
      //} 
     } 
    } 

} 

public void onValueChange(ValueChangeEvent<String> event) { 

    RootPanel.get("payPalDonate").clear(); 
    RootPanel.get().clear(); 
    RootPanel.get().getElement().setInnerHTML(""); 

    //Get the historyToken value 
    String historyToken = event.getValue(); 

    //Check the historyToken 
    if (historyToken.startsWith("!")) 
     historyToken = historyToken.substring(1); 

    if (historyToken.length() == 0) { 
     //Initial entry 
     RootPanel.get().clear(); 
     RootPanel.get().add(new LoginView()); 
    } else if (historyToken.equals("login")) { 
     RootPanel.get().clear(); 
     RootPanel.get().add(new LoginView()); 
    } else if (historyToken.equals("goToVideo")) { 
     RootPanel.get().clear(); 
     Window.Location.replace("https://www.youtube.com/user/GlyndwrBartlett"); 
    } else if (historyToken.equals("goToMetawerx")) { 
     RootPanel.get().clear(); 
     Window.Location.replace("https://www.metawerx.net/"); 
    } else if (historyToken.equals("goToPrivacy")) { 
     RootPanel.get().clear(); 
     RootPanel.get().add(new SecurityAndPrivacyView()); 
    } else if ... 

Dans le LoginView:

initWidget(verticalPanel); 
    RootPanel.get("payPalDonate"); 

Dans le html:

 <div style="margin:auto" id="payPalDonate"> 
      <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"> 
       <input type="hidden" name="cmd" value="_s-xclick"> 
       <input type="image" src="https://www.paypalobjects.com/en_AU/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online!"> 
       <img alt="" border="0" src="https://www.paypalobjects.com/en_AU/i/scr/pixel.gif" width="1" height="1"> 
      </form> 
     </div> 

Répondre

2

En général, dans le GWT RootPanel est jamais effacé. Lorsque vous démarrez votre application, vous passez un conteneur au RootPanel, puis toutes les vues sont ajoutées et supprimées de ce conteneur.

Personnellement, j'utilise le modèle Activities and Places pour toutes mes applications. Ce lien offre un exemple de modification des vues dans un conteneur principal.

0

Je lis le lien fourni par Andrei. En attendant, je trouvais les questions étaient emboîtés par:

RootPanel.get().getElement().setInnerHTML(""); 

J'ai essayé:

RootPanel.getBodyElement().removeChild(RootPanel.get("payPalDonate").getElement()); 

Cependant, cette tubé la même question. En fin de compte, j'ai trouvé cette https://groups.google.com/forum/#!topic/google-web-toolkit/zVvY39blkY4

Je remplacé le code incriminé avec:

RootPanel.get("payPalDonate").setVisible(false); 

Et j'ai placé le code dans le LoginView juste avant que je passe le contrôle à une autre vue. Pas le plus élégant; Cependant, cela fonctionne jusqu'à ce que je digère l'information fournie par Andrei.