On Wed, Sep 29, 2010 at 2:38 PM, Martijn Dashorst < [email protected]> wrote:
> Is there a reason why a com.fredhopper method rename is added to the list > of > modified methods? > > I didn't know we shipped com.fredhopper packages with Wicket. :) > You gave me the karma to commit in svn.apache.org... Now you'll have to support whatever I commit there :-) Fixed. Thanks! c.f.** is being migrated to Wicket 1.5 to see what is still missing in 1.5 compared to 1.4. > > Martijn > > On Wed, Sep 29, 2010 at 1:40 PM, <[email protected]> wrote: > > > Migration to Wicket 1.5< > https://cwiki.apache.org/confluence/display/WICKET/Migration+to+Wicket+1.5> > Page > > *edited* by Martin Grigorov< > https://cwiki.apache.org/confluence/display/~martin-g<https://cwiki.apache.org/confluence/display/%7Emartin-g> > > > > Changes (1) > > ... > > | > > > org.apache.wicket.protocol.http.WebApplication.newWebResponse(HttpServletResponse) > > | > > > org.apache.wicket.protocol.http.WebApplication.newWebResponse(HttpServletRequest, > > HttpServletResponse) | > > | > > > org.apache.wicket.protocol.http.WebApplication.mountBookmarkablePage(String, > > Class) | org.apache.wicket.protocol.http.WebApplication.mountPage(String, > > Class) | > > | > com.fredhopper.bm.application.BMLocalizer.loadStringResource(Component, > > String) | > > com.fredhopper.bm.application.BMLocalizer.loadStringResource(Component, > > String, Locale, String, String) | > > Full Content > > Migrating to Wicket 1.5 > > > > - Environment< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Environment> > > - Upgraded to JUNIT4< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-UpgradedtoJUNIT4> > > - Removed deprecated method, class and interface definitions< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Removeddeprecatedmethod%2Cclassandinterfacedefinitions > > > > - Removed FormComponent.setPersistence()< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-RemovedFormComponent.setPersistence%28%29 > > > > - Removed IComponentBorder< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-RemovedIComponentBorder > > > > - Component.getStyle() implementation changed< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Component.getStyle%28%29implementationchanged > > > > - Removed magic from Border Component< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-RemovedmagicfromBorderComponent > > > > - Component rendering< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Componentrendering > > > > - UTF-8 encoded property files< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-UTF8encodedpropertyfiles > > > > - TabbedPanel< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-TabbedPanel> > > - MarkupContainer.isTransparentResolver() removed< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-MarkupContainer.isTransparentResolver%28%29removed > > > > - IComponentResolver.resolve API has changed< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-IComponentResolver.resolveAPIhaschanged > > > > - Wicket-IOC changes< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-WicketIOCchanges> > > - Visitors< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Visitors> > > - Component Initialization - Component#onInitialize< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-ComponentInitializationComponent%23onInitialize > > > > - Request parameters< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Requestparameters > > > > - Switching to/from secured communication over https< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Switchingto%2Ffromsecuredcommunicationoverhttps > > > > - HeaderContribution< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-HeaderContribution > > > > - Component and IBehavior implement IHeaderContributor< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-ComponentandIBehaviorimplementIHeaderContributor > > > > - Removed HeaderContributor and friends.< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-RemovedHeaderContributorandfriends > .> > > - RequestCycle< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-RequestCycle> > > - Exception handling< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Exceptionhandling > > > > - ImageMap removed< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-ImageMapremoved> > > - getResourceSettings().setAddLastModifiedTimeToResourceReferenceUrl() > > has been replaced< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-getResourceSettings%28%29.setAddLastModifiedTimeToResourceReferenceUrl%28%29hasbeenreplaced > > > > - Inter-component events< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Intercomponentevents > > > > - List of renamed classes and methods< > https://cwiki.apache.org/confluence#MigrationtoWicket1.5-Listofrenamedclassesandmethods > > > > > > Environment > > > > - Wicket 1.5 requires at least Java 5 > > > > Upgraded to JUNIT4 > > > > We changed the root pom.xml to use junit4 (4.7) > > Removed deprecated method, class and interface definitions > > > > In order to keep the code clean, we removed all methods, classes and > > interfaces which were marked deprecated in Wicket 1.4. Before migrating > to > > Wicket 1.5 you should replace all deprecated invocations. > > Removed FormComponent.setPersistence() > > > > WICKET-2213 <https://issues.apache.org/jira/browse/WICKET-2213>: At the > > very beginning of Wicket we introduced FormComponent.setPersistence() > with > > the idea to make creating Login panels very easy. Basically Wicket would > > deal with the Cookie handling for the login details. Now some years later > it > > is evident that this feature is not very useful: > > > > - It basically is used for login panels only > > - Even in our examples Password.setPersistence is false which means > > that "rememberMe" doesn't really work. Only the user name is stored in > a > > Cookie > > - Forcing formComponent.getPageRelativePath() as the Cookie name is > too > > restrictive > > - You can not combine username and password into a single Cookie and > > e.g. decrypt it for safety reasons > > > > So we removed that feature and introduced IAuthenticationStrategy. A > > default implementation has been provided and the examples have been > updated. > > As usual it gets registered with ISecuritySettings. > > > > In case you want to implement your own IAuthenticationStrategy, a utility > > class org.apache.wicket.util.cookies.CookieUtils has been added. > > Removed IComponentBorder > > > > The interface has been removed since IBehavior can do exactly the same. > > MarkupComponentBorder has been migrated, which means you can add > associated > > markup to the behavior. Markup which will surround the behavior's > component. > > Component.getStyle() implementation changed > > > > getStyle() used to return Component.getVariation() + "_" + style. That > > eventually caused issue such as mentioned in WICKET-2298< > https://issues.apache.org/jira/browse/WICKET-2298> > > . > > > > We changed that to getStyle() now returning style only which as a > > consequence required us to change all resource related APIs to add > > variation. To migrate your code you might either provide > > component.getVariation() or null where not relevant. > > Removed magic from Border Component > > > > We had several issues with Border such as WICKET-2494< > https://issues.apache.org/jira/browse/WICKET-2494>and the fact that all > over core you could find code such as "if > > (comp instanceof Border) {}" . That is now all fixed, though at a (low) > > price. Because the magic is now gone, we think it is even clearer than is > > was before. The difference is you have to tell Border where to add the > child > > component. Whether it will be added to > <wicket:border>..</wicket:border>which is called the "border", or <span > > wicket:id="myBorder">..</span> which called the "border body". And > because > > the body can be wrapped by a container such as a Form, you need to add > > (move) the body to the wrapper component via > > wrapper.add(getBodyContainer()) if needed. By doing so you create a clean > > component hierarchy with no more magic and ambiguities and transparent > > resolvers. > > > > border.addToBorder() and border.addToBorderBody() can be used to > > explicitly tell where to add the child. border.add() will add it the > body. > > > > see Border javadoc as well > > Component rendering > > > > We used to have different entry points to render a Page, a Component for > a > > web request and a Component for an AJAX request. That is history. > Whenever > > you want to render a component, simply call component.render(). > > > > You may recall that Component.render(MarkupStream) already existed and > thus > > in most cases (e.g. IComponentResolvers implementations) you simply need > to > > remove the markupStream parameter. > > > > The markup fragment which is still needed to render a Component is > > retrieved via Component.getMarkup(). Most components will ask their > parent > > container to find it via MarkupContainer.getMarkup(Component child). > > > > IMarkupFragment is a new concept introduced. A markup fragment is what is > > says: a fragment of markup taken from a larger resource (file). Please > see > > the javadoc on when it is better to subclass getMarkup() and when > > getMarkup(Component). > > > > Component.getMarkup() successfully returns a result as soon as it is > > connected (add) to a parent with an associated markup resource (file). > Note > > that this usually is not in the component constructor, since the > component > > itself will not yet been added to its parent. > > > > You may recall that until now you very carefully had to forward the > markup > > stream to the next suitable position. That has been simplified as well. > > Every component will use its own markup stream and the parent container > is > > responsible to position it while rendering its child components. > > > > On the same topic: onRender(MarkupStream) has been changed to onRender(); > > no more MarkupStream. You can get for every component once you called > > render() via getMarkupStream(). > > UTF-8 encoded property files > > > > If you are using Java 6 or newer, than Wicket will be configured to use > java.util.Properties#load(Reader(in, > > "utf-8")) for files with "*.utf8.properties" extension. > > TabbedPanel > > > > - ITab.getPanel() now returns WebMarkupContainerWithAssociatedMarkup > > instead of Panel so it is now possible to create tabs using Fragments > or > > Panels rather then just Panels. > > - TabbedPanel.setSelectedTab() is now chainable > > - TabbedPanel now takes a List<? extends ITab> rather then List<ITab> > > > > MarkupContainer.isTransparentResolver() removed > > > > We removed MarkupContainer.isTransparentResolver() in favor of the more > > general IComponentResolver. To make transition easy, we provide a > > TransparentWebMarkupContainer. In cases where > > TransparentWebMarkupContainer doesn't work for you, please see > > TransparentWebMarkupContainer on how to achieve the same effect with your > > component. > > > > Different than MarkupContainer.isTransparentResolver() where the > > component's id wasn't needed in the component's path, with > > IComponentResolver it must be included. Imagine you used to have a > > transparent container <body wicket:id="myBody">, you were able to access > a > > label from the Page just by "myLabel". With the change, you must use > > "myBody:myLabel". > > IComponentResolver.resolve API has changed > > > > Until now, with IComponentResolver.resolve() is was your responsibility > to > > render the component. You returned true, if the component was found and > > rendered. That was because we had different means to render the component > > and wicket itself was not able to judge which one to use. That has > changed > > and thus we were able to change the IComponentResolver.resolve API. With > > the revised API, you simply return the resolved component and wicket core > > knows what to do with it. It made Wicket's internal code simpler and > > hopefully yours as well. > > Wicket-IOC changes > > > > InjectorHolder.getInjector().inject(Object object) is replaced with > > org.apache.wicket.injection.Injector.get().inject(Object object). > > This is valid for both Wicket-Spring and Wicket-Guice. > > > > Wicket-Guice's InjectionFlagCachingGuiceComponentInjector is removed. The > > replacement is GuiceComponentInjector. The caching mechanism that > > InjectionFlagCachingGuiceComponentInjector provided is moved to > > org.apache.wicket.injection.Injector so that the caching is re-used for > both > > Wicket-Spring and Wicket-Guice. > > Wicket-Guice no more supports method injection. The same could be > achieved > > with field injection. This way it is the same as Wicket-Spring and the > > involved code is highly reused between the IOC projects. > > Visitors > > > > Visitors have been cleaned up. Dependency on magic return values defined > in > > Component#IVisitor have been replaced with a Component#IVisit object that > > allows the visitor to control the flow of the traversal. > > > > formComponent.visitChildren(Radio.class, new IVisitor<Component>() > > { > > public /*[1]*/ Object component(Component component /*[2]*/) > > { > > if (value.equals(component.getDefaultModelObject())) > > { > > > addFormComponentValue(formComponent,((Radio<?>)component).getValue()); > > return STOP_TRAVERSAL; /*[3]*/ > > } > > return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER; /*[4]*/ > > } > > }); > > > > formComponent.visitChildren(Radio.class, new IVisitor<Component, Void>() > > { > > public void /*[1]*/ component(final Component component, final > IVisit<Void> visit /*[2]*/) > > { > > if (value.equals(component.getDefaultModelObject())) > > { > > > addFormComponentValue(formComponent,((Radio<?>)component).getValue()); > > visit.stop(); /*[3]*/ > > } > > else > > { > > visit.dontGoDeeper(); /*[4]*/ > > } > > } > > }); > > > > [1] The new style visitor no longer returns a value, instead the value > > can be returned using visit.stop(value) > > [2] The new visit object is introduced to control the visitor traversal > > [3] Instead of relying on magic return values the traversal is stopped by > > using the new visit object > > [4] Same as [3] but a different method on IVisit is used > > Component Initialization - Component#onInitialize > > > > A new callback method was added to Component class - onInitialize(). This > > method is intended to provide an alternate place to initialize the > component > > in addition to standard constructors. The advantage of using this method > > over a constructor is that when it is invoked the Page and the markup of > the > > component are both available and so a more complex initialization can > take > > place. > > > > Before this method was introduced the developer had to rely on using > > onBeforeRender() method with some kind of > "has-already-been-called-or-not" > > check to make sure the initialization code has only been run a single > time. > > onInitialize() has this guarantee baked in - it will only be called once > > during the lifetime of the component. > > Request parameters > > > > To get the current request parameters (for example in Ajax behavior > > processing) in Apache Wicket 1.4: > > > > String parameterValue = > RequestCycle.get().getRequest().getParameter(parameterName); > > > > In 1.5 you have a better control where the parameter comes from: > > > > // GET request StringValue parameterValue = > RequestCycle.get().getRequest().getQueryParameters().getParameterValue(parameterName); > > > > // POST request StringValue parameterValue = > RequestCycle.get().getRequest().getPostParameters().getParameterValue(parameterName); > > > > Or if you don't care about the method: > > > > StringValue parameterValue = > RequestCycle.get().getRequest().getRequestParameters().getParameterValue(parameterName); > > > > Switching to/from secured communication over https > > > > In 1.4 a custom IRequestCycleProcessor is needed: > > > > public class MyApplication extends WebApplication > > { > > @Override > > protected IRequestCycleProcessor newRequestCycleProcessor() > > { > > return new HttpsRequestCycleProcessor(new HttpsConfig()); > > } > > } > > > > In 1.5 this is re-implemented with the new HttpsMapper: > > > > public class MyApplication extends WebApplication > > { > > @Override > > public void init() > > { > > super.init(); > > > > setRootRequestMapper(new > HttpsMapper(getRootRequestMapper(), new HttpsConfig())); > > } > > } > > > > Registering HttpsMapper as a root mapper will check all pages before > > rendering for annotation @RequireHttps. > > HeaderContribution > > > > In 1.4 a custom HeaderContributor needed: > > > > new HeaderContributor(new IHeaderContributor() { > > > > private static final long serialVersionUID = 1L; > > > > @Override > > public void renderHead(IHeaderResponse response) { > > //your logic goes here } > > }); > > > > This could be substitute with: > > > > new AbstractHeaderContributor() { > > > > @Override > > public void renderHead(IHeaderResponse response) { > > //your logic goes here } > > }; > > > > Component and IBehavior implement IHeaderContributor > > > > Prior to 1.5 IHeaderContributor was used as a mixin for components and > > behaviors that wanted to write to the header, in 1.5 it is no longer > > necessary to implement the interface directly because both Component and > > IBehavior implement it. > > Removed HeaderContributor and friends. > > > > HeaderContributor was a convenience that did not add much and actually > made > > things worst by increasing memory footprint in a lot of cases. Instead we > > can simply override IHeaderContributor#renderHead(IHeaderResponse) and > > achieve the same functionality in a simpler and consistent fashion. > > > > Wicket 1.4: > > > > public class MyPage extends WebPage { > > public MyPage() { > > add(HeaderContributor.forJavaScript(YuiLib.class, > "yahoo-dom-event/yahoo-dom-event.js")); > > add(HeaderContributor.forCss(AbstractCalendar.class, > "assets/skins/sam/calendar.css")); > > } > > } > > > > Becomes the following in 1.5: > > > > public class MyPage extends WebPage { > > public MyPage() { > > } > > public void renderHead(IHeaderResponse response) { > > response.renderJavascriptReference(new > PackageResourceReference(YuiLib.class, > > "yahoo-dom-event/yahoo-dom-event.js")); > > response.renderCSSReference(new > PackageResourceReference(AbstractCalendar.class, > > "assets/skins/sam/calendar.css")); > > } > > } > > > > Likewise, > > > > public class MyPage extends WebPage { > > public MyPage() { > > WebMarkupContainer c=new WebMarkupContainer(); > > c.add(HeaderContributor.forJavaScript(YuiLib.class, > "yahoo-dom-event/yahoo-dom-event.js")); > > add(c); > > } > > } > > > > becomes > > > > public class MyPage extends WebPage { > > public MyPage() { > > WebMarkupContainer c=new WebMarkupContainer(); > > c.add(new AbstractBehavior() { > > public void renderHead(IHeaderResponse response) { > > response.renderJavascriptReference(new > PackageResourceReference(YuiLib.class, > > "yahoo-dom-event/yahoo-dom-event.js")); > > } > > }); > > add(c); > > } > > } > > > > RequestCycle > > > > RequestCycle has changed in 1.5-M1 and WebRequestCycle has been removed. > > > > When we want to override RequestCycle's methods and write our logic codes > > we can not do it like 1.4.x. > > > > eg. > > *ReqeustCycle* > > > > public MyRequestCycle extends WebRequestCycle { > > @Override > > public void onBeginRequest() { > > //... } > > > > @Override > > public void onEndRequest() { > > //... } > > > > @Override > > public Page onRuntimeException(Page page, RuntimeException e) { > > // ... } > > } > > > > In this case we'll need to extend RequestCycle and Override > > > org.apache.wicket.Application.setRequestCycleProvider(IRequestCycleProvider) > > to return our a provider for a custom RequestCycle implementation. > > Exception handling > > > > In Wicket 1.4 it was needed to extend > > org.apache.wicket.RequestCycle.onRuntimeException(Page, > RuntimeException). > > Wicket 1.5 gives even better control, by overriding > > org.apache.wicket.Application.newExceptionMapper() it is possible to > change > > even the default processing of error pages. > > ImageMap removed > > > > ImageMap was deprecated in 1.4.11 and in 1.5 it was replaced with > > ClientSideImageMap component > > getResourceSettings().setAddLastModifiedTimeToResourceReferenceUrl() has > > been replaced > > > > With https://issues.apache.org/jira/browse/WICKET-3028 and > > https://issues.apache.org/jira/browse/WICKET-3021 this method was > > replaced. The timestamp, which previously was added as a query parameter > to > > the resource url is now part of the file's basename (the name part before > > the extension). This has several advantages and gives you best possible > > caching support. See for example chapter > > > > Use fingerprinting to dynamically enable caching > > > > in > > > > http://code.google.com/intl/de-DE/speed/page-speed/docs/caching.html > > > > The feature is enabled by default so unless you want to disable it with > > getResourceSettings().setUseTimestampOnResources(boolean) or query its > > state with getResourceSettings().getUseTimestampOnResources() you usually > > don't have to care about it at all. Timestamping only works when the > > ResourceReference supports a last modified timestamp and returns a > non-null > > timestamp for method ResourceReference.getLastModified(). This is always > > true for package resources and wicket:link. > > Inter-component events > > > > Wicket 1.5 offers a simple, yet flexible, way for component to > communicate > > with each other in a decoupled manner. The two major interfaces that > > facilitate this are: > > > > /** > > * Objects that can send events > > * > > * @author Igor Vaynberg (ivaynberg) > > */public interface IEventSource > > { > > /** > > * Sends an event > > * > > * @param <T> > > * tyep of payload > > * > > * @param sink > > * object that will receive the event > > * @param broadcast > > * if the object that receives the event needs to > broadcast it to others, this is the > > * type of broadcast that should be used > > * @param payload > > * event payload > > */ > > <T> void send(IEventSink sink, Broadcast broadcast, T payload); > > } > > > > and > > > > /** > > * Objects that can receive events > > * > > * @author Igor Vaynberg (ivaynberg) > > */public interface IEventSink > > { > > /** > > * Called when an event is sent to this sink > > * > > * @param event > > */ > > void onEvent(IEvent<?> event); > > } > > > > . > > > > The classes that implement these interfaces, and can thus participate in > > the event mechanism are: Component, RequestCycle, Session, and > Application. > > > > The mechanism allows for different event broadcast methods defined here: > > > > /** > > * Defines the event broadcast type. > > * > > * @author igor > > */public enum Broadcast { > > /** > > * Breadth first traversal. Supported sinks in order of traversal: > > * > > * <ol> > > * <li>{...@link Application}</li> > > * <li>{...@link Session}</li> > > * <li>{...@link RequestCycle}</li> > > * <li>{...@link Page}</li> > > * <li>{...@link Component}s</li> > > * </ol> > > * > > * Any sink along the path can be specified and traversal will > start with the specified sink as > > * root, eg: > > * > > * <ul> > > * <li>If a component inside the page is specified then only the > component and all its children > > * will receive the event</li> > > * <li>If Session is specified then the session, the request cycle, > the page and all its > > * components will receive the event</li> > > * </ul> > > */ > > BREADTH, > > /** > > * Depth first traversal. Supported sinks in order of traversal: > > * > > * <ol> > > * <li>{...@link Component}s</li> > > * <li>{...@link Page}</li> > > * <li>{...@link RequestCycle}</li> > > * <li>{...@link Session}</li> > > * <li>{...@link Application}</li> > > * </ol> > > * > > * Any sink along the path can be specified and traversal will > start with the specified sink as > > * root, eg: > > * > > * <ul> > > * <li>If a component inside the page is specified then only the > component and all its children > > * will receive the event</li> > > * <li>If Session is specified then the session, the request cycle, > the page and all its > > * components will receive the event</li> > > * </ul> > > * > > */ > > DEPTH, > > /** > > * A bubble-up traversal. In a bubble-up traversal only the sink > and its parents are notified. > > * > > * Supported sinks in order of traversal are: > > * <ol> > > * <li>{...@link Component}s</li> > > * <li>{...@link Page}</li> > > * <li>{...@link RequestCycle}</li> > > * <li>{...@link Session}</li> > > * <li>{...@link Application}</li> > > * </ol> > > * > > * Any sink along the path can be specified and traversal will > start at the specified sink and > > * work its way up to the {...@link Application}, eg: > > * > > * <ul> > > * <li>If a component inside the page is specified then only the > component, its parents, the > > * request cycle, the session, and the application will be > notified. > > * <li>If Session is specified then the session, the application > will be notified</li> > > * </ul> > > */ > > BUBBLE, > > /** > > * Only the specified sink receives the event > > */ > > EXACT; > > } > > > > There is an example in wicket-examples which demonstrates the usage of > > this. > > List of renamed classes and methods > > 1.4 1.5 org.apache.wicket.request.resource.ResourceReference > org.apache.wicket.request.resource.PackageResourceReference > org.apache.wicket.RedirectToUrlException > org.apache.wicket.request.flow.RedirectToUrlException > org.apache.wicket.Request org.apache.wicket.request.Request > org.apache.wicket.RequestCycle org.apache.wicket.request.cycle.RequestCycle > org.apache.wicket.RequestCycle.urlFor > org.apache.wicket.request.cycle.RequestCycle.renderUrlFor > org.apache.wicket.util.lang.Objects.cloneObject(Object) > org.apache.wicket.util.lang.WicketObjects.cloneObject(Object) > org.apache.wicket.protocol.http.WebRequest > org.apache.wicket.request.http.WebRequest > org.apache.wicket.protocol.http.WebResponse > org.apache.wicket.request.http.WebResponse > org.apache.wicket.request.target.basic.RedirectRequestTarget > RedirectRequestHandler > org.apache.wicket.request.target.coding.QueryStringUrlCodingStrategy use > PageParameters.getNamedParameter(String) with any IRequestHandler > org.apache.wicket.request.http.WebRequest.getHttpServletRequest() > org.apache.wicket.protocol.http.servlet.ServletWebRequest.getHttpServletRequest() > > org.apache.wicket.protocol.http.WebApplication.newWebResponse(final > > HttpServletResponse) (missing) > org.apache.wicket.Application.set(Application) > org.apache.wicket.ThreadContext.setApplication(Application) > > org.apache.wicket.protocol.http.BufferedWebResponse.BufferedWebResponse(HttpServletResponse) > > > org.apache.wicket.protocol.http.BufferedWebResponse.BufferedWebResponse(WebResponse) > > org.apache.wicket.PageParameters > org.apache.wicket.request.mapper.parameter.PageParameters > PageParameters.put(String, String) > org.apache.wicket.request.mapper.parameter.PageParameters.setNamedParameter(String, > > Object) org.apache.wicket.protocol.http.HttpSessionStore > org.apache.wicket.session.HttpSessionStore > org.apache.wicket.protocol.http.WebApplication.newSessionStore() (missing, > HttpSessionStore is the only supported) > org.apache.wicket.markup.html.resources.CompressedResourceReference > org.apache.wicket.request.resource.CompressedResourceReference > org.apache.wicket.markup.html.resources.JavascriptResourceReference > org.apache.wicket.request.resource.JavascriptResourceReference > org.apache.wicket.markup.html.image.Image.Image(String) (this constructor > is protected in 1.5, as replacement can be used > > NonCachingImage(String)) > org.apache.wicket.markup.html.image.resource.DynamicImageResource > org.apache.wicket.request.resource.DynamicImageResource > org.apache.wicket.util.convert.ConverterLocator > org.apache.wicket.ConverterLocator org.apache.wicket.util.lang.Objects > org.apache.wicket.util.lang.WicketObjects > org.apache.wicket.protocol.http.WebApplication.sessionDestroyed(String) > org.apache.wicket.protocol.http.WebApplication.sessionUnbound(String) > org.apache.wicket.protocol.https.HttpsRequestCycleProcessor > org.apache.wicket.protocol.https.HttpsMapper > org.apache.wicket.PageParameters.getInt(String) > org.apache.wicket.request.mapper.parameter.PageParameters.getNamedParameter(String).toInt() > org.apache.wicket.protocol.http.WebRequestCycle.newBrowserInfoPage(String) > > org.apache.wicket.protocol.http.WebSession.newBrowserInfoPage(String) > > org.apache.wicket.protocol.http.WebApplication.newWebRequest(HttpServletRequest) > > > org.apache.wicket.protocol.http.WebApplication.newWebRequest(HttpServletRequest, > > String) > > org.apache.wicket.protocol.http.WebApplication.newWebResponse(HttpServletResponse) > > > org.apache.wicket.protocol.http.WebApplication.newWebResponse(HttpServletRequest, > > HttpServletResponse) > org.apache.wicket.protocol.http.WebApplication.mountBookmarkablePage(String, > > Class) org.apache.wicket.protocol.http.WebApplication.mountPage(String, > > Class) > com.fredhopper.bm.application.BMLocalizer.loadStringResource(Component, > > String) > com.fredhopper.bm.application.BMLocalizer.loadStringResource(Component, > > String, Locale, String, String) > > Change Notification Preferences< > https://cwiki.apache.org/confluence/users/viewnotifications.action> > > View Online< > https://cwiki.apache.org/confluence/display/WICKET/Migration+to+Wicket+1.5>| > View > > Changes< > https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=2853449&revisedVersion=53&originalVersion=52>| > Add > > Comment< > https://cwiki.apache.org/confluence/display/WICKET/Migration+to+Wicket+1.5?showComments=true&showCommentArea=true#addcomment > > > > > > > > -- > Become a Wicket expert, learn from the best: http://wicketinaction.com > Apache Wicket 1.4 increases type safety for web applications > Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.8 >
