Paul Martin
2016-04-16 eecaad8b8e2c447429c31a01d49260ddd6b4ee03
src/main/java/com/gitblit/wicket/SessionlessForm.java
@@ -22,6 +22,7 @@
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.html.form.StatelessForm;
import org.apache.wicket.protocol.http.RequestUtils;
import org.apache.wicket.protocol.http.WicketURLDecoder;
import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy;
import org.apache.wicket.util.string.AppendingStringBuffer;
@@ -35,35 +36,35 @@
 * This class is used to create a stateless form that can POST or GET to a
 * bookmarkable page regardless of the pagemap and even after session expiration
 * or a server restart.
 *
 *
 * The trick is to embed "wicket:bookmarkablePage" as a hidden field of the form.
 * Wicket already has logic to extract this parameter when it is trying
 * to determine which page should receive the request.
 *
 *
 * The parameters of the containing page can optionally be included as hidden
 * fields in this form.  Note that if a page parameter's name collides with any
 * fields in this form.  Note that if a page parameter's name collides with any
 * child's wicket:id in this form then the page parameter is excluded.
 *
 *
 * @author James Moger
 *
 */
public class SessionlessForm<T> extends StatelessForm<T> {
   private static final long serialVersionUID = 1L;
   private static final String HIDDEN_DIV_START = "<div style=\"width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden\">";
   private final Class<? extends BasePage> pageClass;
   private final PageParameters pageParameters;
   protected final Class<? extends BasePage> pageClass;
   protected final PageParameters pageParameters;
   private final Logger log = LoggerFactory.getLogger(SessionlessForm.class);
   /**
    * Sessionless forms must have a bookmarkable page class.  A bookmarkable
    * page is defined as a page that has only a default and/or a PageParameter
    * constructor.
    *
    *
    * @param id
    * @param bookmarkablePageClass
    */
@@ -75,7 +76,7 @@
    * Sessionless forms must have a bookmarkable page class.  A bookmarkable
    * page is defined as a page that has only a default and/or a PageParameter
    * constructor.
    *
    *
    * @param id
    * @param bookmarkablePageClass
    * @param pageParameters
@@ -87,12 +88,12 @@
      this.pageParameters = pageParameters;
   }
   /**
    * Append an additional hidden input tag that forces Wicket to correctly
    * determine the destination page class even after a session expiration or
    * a server restart.
    *
    *
    * @param markupStream
    *            The markup stream
    * @param openTag
@@ -133,10 +134,10 @@
      getResponse().write(buffer);
      super.onComponentTagBody(markupStream, openTag);
   }
   /**
    * Take URL-encoded query string value, unencode it and return HTML-escaped version
    *
    *
    * @param s
    *            value to reencode
    * @return reencoded value
@@ -145,4 +146,14 @@
      String un = WicketURLDecoder.QUERY_INSTANCE.decode(s);
      return Strings.escapeMarkup(un).toString();
   }
   protected String getAbsoluteUrl() {
      return getAbsoluteUrl(pageClass, pageParameters);
   }
   protected String getAbsoluteUrl(Class<? extends BasePage> pageClass, PageParameters pageParameters) {
      String relativeUrl = urlFor(pageClass, pageParameters).toString();
      String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl);
      return absoluteUrl;
   }
}