2016-10-21 3 views
0

GWT Javaを使用していますが、LoginViewから移動すると、HTMLフォームの一部であるPayPal Donateボタン(つまり、RootPanelをクリア)を削除しようとしています。別のビューに次のビューを表示する前にRootPanelをクリアするには

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

これはフォームをクリアするので、次のビューには表示されません。ただし、次のビューが表示されると、ボタン、ハイパーリンク、およびビューのブラウザの戻るボタンが機能しません。典型的

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

答えて

2

GWTにRootPanelがクリアされることはない:LoginViewで

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

:HTMLで

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

コードはです。アプリケーションを起動すると、コンテナをRootPanelに渡した後、すべてのビューがそのコンテナに追加されたり削除されたりします。

個人的には、私はすべてのアプリケーションにActivities and Placesパターンを使用します。このリンクは、メインコンテナ内のビューを変更する方法の例を示しています。

0

Andreiが提供するリンクを読んでいます。私が試した

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

:一方で、私は問題がで同棲されていた見つけ

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

しかし、これは同じ問題をケース入り。最後に、私はこのhttps://groups.google.com/forum/#!topic/google-web-toolkit/zVvY39blkY4

を見つけたので、私は問題のあるコードを置き換え:

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

そして私は、私は別のビューに制御を渡す直前にLoginView内のコードを配置。最もエレガントではありません。しかし、それはAndreiによって提供された情報を消化するまで機能します。

関連する問題