#java #html #gwt #paypal
#java #HTML #gwt #paypal
Вопрос:
Я использую GWT Java и пытаюсь удалить кнопку пожертвования PayPal (т. Е. Очистить корневую панель), которая является частью HTML-формы, при переходе из LoginView в другое представление. Я обнаружил, что мне следует использовать:
RootPanel.get("payPalDonate").clear();
RootPanel.get().clear();
RootPanel.get().getElement().setInnerHTML("");
Это очищает форму, поэтому она не отображается в следующем представлении; однако, когда отображается следующее представление, кнопки, гиперссылки и кнопка возврата браузера в представлении не работают.
Код находится в :
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 ...
В LoginView:
initWidget(verticalPanel);
RootPanel.get("payPalDonate");
В 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>
Ответ №1:
Обычно в GWT корневая панель никогда не очищается. Когда вы запускаете свое приложение, вы передаете контейнер на корневую панель, а затем все представления добавляются в этот контейнер и удаляются из него.
Лично я использую шаблон Activities и Places для всех своих приложений. По этой ссылке приведен пример того, как изменять представления в главном контейнере.
Ответ №2:
Я читаю ссылку, предоставленную Андреем. Тем временем я обнаружил, что проблемы были устранены:
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 непосредственно перед передачей управления другому представлению. Не самый элегантный; однако, он работает, пока я не переварю информацию, предоставленную Андреем.