Buggy code:
public abstract class RequestCycle { private static final ThreadLocal current = new ThreadLocal ( ) ; private static final int DETACH_REQUEST = 5 ; private static final int DONE = 6 ; private static final Logger log = LoggerFactory . getLogger ( RequestCycle . class ) ; private static final int NOT_STARTED = 0 ; private static final int PREPARE_REQUEST = 1 ; private static final int PROCESS_EVENTS = 3 ; private static final int RESOLVE_TARGET = 2 ; private static final int RESPOND = 4 ; public static RequestCycle get ( ) { } protected static void set ( RequestCycle cycle ) { } private boolean automaticallyClearFeedbackMessages = true ; private int currentStep = RequestCycle . NOT_STARTED ; private boolean handlingException = false ; private final Response originalResponse ; private boolean redirect ; private final transient ArrayListStack requestTargets = new ArrayListStack ( 3 ) ; private PageParameters pageParameters ; private Session session ; private final long startTime = System . currentTimeMillis ( ) ; protected final Application application ; protected final IRequestCycleProcessor processor ; protected Request request ; protected Response response ; private transient boolean urlForNewWindowEncoding ; protected RequestCycle ( final Application application , final Request request , final Response response ) { } public final Application getApplication ( ) { } public final ClientInfo getClientInfo ( ) { } public final Response getOriginalResponse ( ) { } public final PageParameters getPageParameters ( ) { } public abstract IRequestCycleProcessor getProcessor ( ) { } public final boolean getRedirect ( ) { } public final Request getRequest ( ) { } public final IRequestTarget getRequestTarget ( ) { } public final Response getResponse ( ) { } public final Page getResponsePage ( ) { } public final Class getResponsePageClass ( ) { } public final Session getSession ( ) { } public final long getStartTime ( ) { } public boolean isRedirect ( ) { } public Page onRuntimeException ( Page page , RuntimeException e ) { } public abstract void redirectTo ( final Page page ) { } public final void request ( ) { } public final void request ( final Component component ) { } public final void request ( IRequestTarget target ) { } public void setAutomaticallyClearFeedbackMessages ( boolean automaticallyClearFeedbackMessages ) { } public final void setRedirect ( final boolean redirect ) { } public final void setRequest ( Request request ) { } public final void setRequestTarget ( IRequestTarget requestTarget ) { } public final Response setResponse ( final Response response ) { } private String getCurrentPageMap ( ) { } public final void setResponsePage ( final Class pageClass ) { } public final void setResponsePage ( final Class pageClass , final PageParameters pageParameters ) { } public final void setResponsePage ( final Class pageClass , final PageParameters pageParameters , final String pageMapName ) { } public final void setResponsePage ( final Page page ) { } public String toString ( ) { } public final boolean isUrlForNewWindowEncoding ( ) { } public final void setUrlForNewWindowEncoding ( ) { } private final CharSequence encodeUrlFor ( final IRequestTarget requestTarget ) { } public final CharSequence urlFor ( final Class pageClass , final PageParameters parameters ) { } public final CharSequence urlFor ( final Component component , final IBehavior behaviour , final RequestListenerInterface listener ) { } public final CharSequence urlFor ( final Component component , final RequestListenerInterface listener , ValueMap params ) { final Page page = component . getPage ( ) ; final IRequestTarget target ; <START_BUG> if ( ( ( listener != ( IRedirectListener . INTERFACE ) ) && ( component . isStateless ( ) ) ) && ( page . isBookmarkable ( ) ) ) { <END_BUG> PageParameters pageParameters = page . getPageParameters ( ) ; if ( pageParameters == null ) { pageParameters = new PageParameters ( ) ; } if ( params != null ) { Iterator it = params . entrySet ( ) . iterator ( ) ; while ( it . hasNext ( ) ) { final Map . Entry entry = ( ( Map . Entry ) ( it . next ( ) ) ) ; final String key = entry . getKey ( ) . toString ( ) ; final String value = entry . getValue ( ) . toString ( ) ; pageParameters . add ( RequestCycle . encode ( key ) , RequestCycle . encode ( value ) ) ; } } target = new org . apache . wicket . request . target . component . BookmarkableListenerInterfaceRequestTarget ( page . getPageMapName ( ) , page . getClass ( ) , pageParameters , component , listener ) ; return encodeUrlFor ( target ) ; } else { page . setPageStateless ( Boolean . FALSE ) ; final Session session = getSession ( ) ; if ( session . isTemporary ( ) ) { session . bind ( ) ; } target = new org . apache . wicket . request . target . component . listener . ListenerInterfaceRequestTarget ( page , component , listener ) ; CharSequence url = encodeUrlFor ( target ) ; if ( params != null ) { AppendingStringBuffer buff = new AppendingStringBuffer ( url ) ; Iterator it = params . entrySet ( ) . iterator ( ) ; while ( it . hasNext ( ) ) { final Map . Entry entry = ( ( Map . Entry ) ( it . next ( ) ) ) ; final String key = entry . getKey ( ) . toString ( ) ; final String value = entry . getValue ( ) . toString ( ) ; buff . append ( "&" ) ; buff . append ( RequestCycle . encode ( key ) ) ; buff . append ( "=" ) ; buff . append ( RequestCycle . encode ( value ) ) ; } url = buff ; } return url ; } } private static String encode ( String value ) { }

Fix:
if ( ( ( ( listener != ( IRedirectListener . INTERFACE ) ) && ( component . isStateless ( ) ) ) && ( page . isBookmarkable ( ) ) ) && ( page . getStatelessHint ( ) ) ) {