Merged #136 "Tomcat hates redirects after ajax form submissions"
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;

@@ -112,6 +113,15 @@
 		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() {

 		return GitBlitWebSession.get().getLocale().getLanguage();

 	}

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