...
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.
...
StringResourceModel has changed some of its constructors and modified the order of the arguments. The constructors with default values might introduce errors because the java compiler matches them, but their semantics have changed.
Code Block | |||||||
---|---|---|---|---|---|---|---|
| |||||||
public StringResourceModel(final String resourceKey, final Component component, final IModel<?> model, final Object[] parameters, final String defaultValue) |
Became:
Code Block | |||||||
---|---|---|---|---|---|---|---|
| |||||||
public StringResourceModel(final String resourceKey, final Component component, final IModel<?> model, final String defaultValue, final Object... parameters) |
...
Code Block |
---|
public StringResourceModel(final String resourceKey, final Component component, final IModel<?> model, final Object... parameters) |
...
Where the Object\[\] array is matched to the first parameter of the ellipsis and the defaultValue as the second parameter.
StringResourceModel#setLocalizer() was removed, if needed you can override #getLocalizer() instead.
...
Code Block |
---|
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)
\ Wiki Markup
[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
...
In Wicket 1.4 it was needed to extend org.apache.wicket.RequestCycle.onRuntimeException(Page, RuntimeException).
Wicket 1.5 gives even better control:
- add your own org.apache.wicket.request.cycle.IRequestCycleListener (AbstractRequestCycleListener) with org.apache.wicket.Application.getRequestCycleListeners().add() and implement its #onException(RequestCycle, Exception)
- or override org.apache.wicket.Application.getExceptionMapperProvider() - the IExceptionMapper is used if none of the configured IRequestCycleListeners doesn't know how to handle the exception.
For information on how the request cycle handles exceptions see RequestCycle in Wicket 1.5 for more information
ImageMap removed
ImageMap was deprecated in 1.4.11 and in 1.5 it was replaced with ClientSideImageMap component
...
- resource caching strategy that adds a version for the
- requested resource to the filename.
versioned_filename := \ [basename\]\[version-prefix\]\[version\](.extension) Wiki Markup
In development mode the \mode the [version\] string is be last modified timestamp of the resource in UNIX milliseconds. If the resource resides in a jar the timestamp of the jar file will be taken instead.unmigrated-wiki-markup Wiki Markup
In production mode the MD5 hash of the file content will be calculated and taken as \ [version\]. The calculation will be done once and then be cached for the lifetime of the application. We decided against choosing the last modified timestamp in deployment mode since it seems to be inconsistent in some cluster setups.
Example:
basename | styles.css |
last-modified | 1303741587000 |
md5-checksum | F1336A3F160F1399ECF87B6196AB1C2A |
decorated-filename-in-development-mode | styles-ver-1303741587000.css |
decorated-filename-in-deployment-mode | styles-ver-F1336A3F160F1399ECF87B6196AB1C2A.css |
...
1.4 | 1.5 |
---|---|
org.apache.wicket.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.urlFor |
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.target.resource.ResourceStreamRequestTarget | import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler |
org.apache.wicket.request.http.WebRequest.getHttpServletRequest() | org.apache.wicket.protocol.http.servlet.ServletWebRequest.getContainerRequest() |
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 |
org.apache.wicket.PageParameters.put(String, String) | org.apache.wicket.request.mapper.parameter.PageParameters.set(String, Object) |
org.apache.wicket.PageParameters.getInt(String) | org.apache.wicket.request.mapper.parameter.PageParameters.get(String).toInt() |
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 | Removed (see above) |
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.protocol.http.WebRequestCycle.newBrowserInfoPage(String) | org.apache.wicket.protocol.http.WebSession.newBrowserInfoPage(String) |
org.apache.wicket.protocol.http.WebRequestCycle.getClientInfo() | org.apache.wicket.protocol.http.WebSession.getClientInfo() |
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.mount(String, Class) | org.apache.wicket.protocol.http.WebApplication.mountPage(String, Class) |
org.apache.wicket.protocol.http.WebApplication.mountBookmarkablePage(String, Class) | org.apache.wicket.protocol.http.WebApplication.mountPage(String, Class) |
org.apache.wicket.resource.loader.IStringResourceLoader.loadStringResource(Component, String) | org.apache.wicket.resource.loader.IStringResourceLoader.loadStringResource(Component, String, Locale, String, String) |
org.apache.wicket.ajax.IAjaxCallDecorator.decorateScript(CharSequence) | org.apache.wicket.ajax.IAjaxCallDecorator.decorateScript(Component, CharSequence) |
org.apache.wicket.IResponseFilter (and all default implementations) | org.apache.wicket.response.filter.IResponseFilter |
org.apache.wicket.markup.html.form.Form.process() | org.apache.wicket.markup.html.form.Form.process(IFormSubmittingComponent) |
org.apache.wicket.Application.addComponentInstantiationListener() | org.apache.wicket.Application.getComponentInstantiationListeners().add() |
org.apache.wicket.markup.html.DynamicWebResource | org.apache.wicket.request.resource.ByteArrayResource <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="e2eb5c20-df58-4a13-b642-48e856a8eb7e"><ac:plain-text-body><![CDATA[ |
org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable.DataTable(String, IColumn<T>[], IDataProvider<T>, int) | org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable.DataTable(String, List<IColumn<T>>, IDataProvider<T>, int) ]]></ac:plain-text-body></ac:structured-macro> |
org.apache.wicket.validation.IValidatorAddListener | Validator.bind(Component) |
org.apache.wicket.behavior.AbstractBehavior.renderHead(IHeaderResponse) | org.apache.wicket.behavior.Behavior.renderHead(Component, IHeaderResponse) |
org.apache.wicket.protocol.http.request.CryptedUrlWebRequestCodingStrategy | org.apache.wicket.request.mapper.CryptoMapper |
org.apache.wicket.util.template.PackagedTextTemplate | org.apache.wicket.util.template.PackageTextTemplate |
org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByLink.onAjaxClick(AjaxRequestTarget) | org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByLink.onClick(AjaxRequestTarget) |
org.apache.wicket.util.file.IFileUploadCleaner | org.apache.wicket.util.file.IFileCleaner |
org.apache.wicket.markup.html.WebPage.configureResponse() | WebPage.configureResponse(WebResponse) |
Page.onPageAttached() | IRequestCycleListener.onRequestTargetResolved -> if (handler instanceof IPageRequestHandler) |