From 2598bf3ff526f46259244d7c5f60dcc2241f3020 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 30 Sep 2014 08:01:39 -0400 Subject: [PATCH] Bypass Wicket redirects after AJAX form submissions, they break Tomcat --- src/main/java/com/gitblit/wicket/pages/BasePage.java | 11 +++++++++++ src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java | 2 +- src/main/java/com/gitblit/wicket/pages/EditTicketPage.java | 4 ++-- src/main/java/com/gitblit/wicket/pages/NewTicketPage.java | 3 ++- src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java | 2 +- src/main/java/com/gitblit/wicket/pages/RootPage.java | 4 ++-- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.java b/src/main/java/com/gitblit/wicket/pages/BasePage.java index b454b7a..03d1918 100644 --- a/src/main/java/com/gitblit/wicket/pages/BasePage.java +++ b/src/main/java/com/gitblit/wicket/pages/BasePage.java @@ -45,6 +45,7 @@ import org.apache.wicket.protocol.http.RequestUtils; import org.apache.wicket.protocol.http.WebResponse; import org.apache.wicket.protocol.http.servlet.ServletWebRequest; +import org.apache.wicket.request.target.basic.RedirectRequestTarget; import org.apache.wicket.util.time.Duration; import org.apache.wicket.util.time.Time; import org.slf4j.Logger; @@ -110,6 +111,15 @@ String relativeUrl = urlFor(clazz, params).toString(); String canonicalUrl = RequestUtils.toAbsolutePath(relativeUrl); return canonicalUrl; + } + + protected void manualRedirect(Class<? extends BasePage> pageClass) { + redirect(pageClass, null); + } + + protected void redirect(Class<? extends BasePage> pageClass, PageParameters parameters) { + String absoluteUrl = getCanonicalUrl(pageClass, parameters); + getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl)); } protected String getLanguageCode() { @@ -495,4 +505,5 @@ } return sb.toString(); } + } diff --git a/src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java b/src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java index 4ed77d8..801631e 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditMilestonePage.java @@ -143,7 +143,7 @@ } if (success && app().tickets().updateMilestone(getRepositoryModel(), tm, createdBy)) { - setResponsePage(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); + redirect(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); } else { // TODO error } diff --git a/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java b/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java index 074ffa6..b55ce9c 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java @@ -331,13 +331,13 @@ if (ticket != null) { TicketNotifier notifier = app().tickets().createNotifier(); notifier.sendMailing(ticket); - setResponsePage(TicketsPage.class, WicketUtils.newObjectParameter(getRepositoryModel().name, "" + ticket.number)); + redirect(TicketsPage.class, WicketUtils.newObjectParameter(getRepositoryModel().name, "" + ticket.number)); } else { // TODO error } } else { // nothing to change?! - setResponsePage(TicketsPage.class, WicketUtils.newObjectParameter(getRepositoryModel().name, "" + ticket.number)); + redirect(TicketsPage.class, WicketUtils.newObjectParameter(getRepositoryModel().name, "" + ticket.number)); } } }); diff --git a/src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java b/src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java index cc33190..24a4312 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java +++ b/src/main/java/com/gitblit/wicket/pages/NewMilestonePage.java @@ -108,7 +108,7 @@ if (milestone != null) { milestone.due = due; app().tickets().updateMilestone(getRepositoryModel(), milestone, createdBy); - throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); + redirect(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName)); } else { // TODO error } diff --git a/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java b/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java index e6d9cb1..f80a7d7 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java @@ -222,7 +222,8 @@ if (ticket != null) { TicketNotifier notifier = app().tickets().createNotifier(); notifier.sendMailing(ticket); - setResponsePage(TicketsPage.class, WicketUtils.newObjectParameter(getRepositoryModel().name, "" + ticket.number)); + + redirect(TicketsPage.class, WicketUtils.newObjectParameter(getRepositoryModel().name, "" + ticket.number)); } else { // TODO error } diff --git a/src/main/java/com/gitblit/wicket/pages/RootPage.java b/src/main/java/com/gitblit/wicket/pages/RootPage.java index 6a933b7..15e4304 100644 --- a/src/main/java/com/gitblit/wicket/pages/RootPage.java +++ b/src/main/java/com/gitblit/wicket/pages/RootPage.java @@ -280,12 +280,12 @@ PageParameters params = getPageParameters(); if (params == null) { // redirect to this page - setResponsePage(getClass()); + manualRedirect(getClass()); } else { // Strip username and password and redirect to this page params.remove("username"); params.remove("password"); - setResponsePage(getClass(), params); + redirect(getClass(), params); } } } -- Gitblit v1.9.1