Migrating to Wicket 7.0
Environment
Wicket 7.0 requires at least Java 7
Wicket 7.0 requires Servlet 3.0
The HTTP response is not flushed automatically when the request is started in asynchronous mode. WICKET-5152
This is an improvement in Wicket 7.0 which should not affect any application migrating from Wicket 6.x. But if you use Servlet 3.0's AsyncContext in IResource in Wicket 7 then make sure that your code flushes the http response after completing the request.
API changes
org/apache/wicket/core/util/io/SerializableChecker is replaced with org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream WICKET-4817
CheckingObjectOutputStream accepts a list of org.apache.wicket.core.util.objects.checker.IObjectChecker objects which are used to check for different kind of problems during object serialization. Commit diff: d0441059e0
org/apache/wicket/markup/html/border/BoxBorder is removed with no replacement WICKET-4966.
BoxBorder class has been deprecated in Wicket 6.x series
org.apache.wicket.Component#renderHead(HtmlHeaderContainer) is renamed to Component#internalRenderHead(HtmlHeaderContainer) WICKET-4964
Component#renderHead(HtmlHeaderContainer) was very similar to the usually used Component#renderHead(IHeaderResponse). So it has been renamed to avoid any confusions.
org.apache.wicket.request.resource.ResourceReference#getDependencies() now returns a mutable List<HeaderItem> WICKET-5124
The old API returned Iterable<? extends HeaderItem> and was inconvenient to override and add additional dependencies.
With the new API it is as easy as:
@Override public List<HeaderItem> getDependencies() { List<HeaderItem> dependencies = super.getDependencies(); dependencies.add(dep1); dependencies.add(dep2); return dependencies; }
The same is done for org.apache.wicket.markup.head.HeaderItem#getDependencies() too.
org.apache.wicket.model.StringResourceModel constructor accepts IModel<String> for its default value WICKET-4972
There were two problems with the old way:
- since the parameters argument type is Object..., i.e. varargs, it was hard for the compiler and runtime to differentiate the "defaultValue" from the "parameters"
- it wasn't possible to use lazy evaluation of the default value
If in your application you have code like:
StringResourceModel model = new StringResourceModel(resourceKey, model, "Some default value", new Object[] [param1, param2]);
then the simplest solution is to use Model.of("Some default value"):
StringResourceModel model = new StringResourceModel(resourceKey, model, Model.of("Some default value"), new Object[] [param1, param2]);
org.apache.wicket.extensions.validation.validator.+Xyz+Validator#decorate() now works with IValidationError WICKET-5174
This method now accepts IValidationError as an argument and returns IValidationError. This way it can be used with other IValidationError implementations like RawValidationError for example.
org.apache.wicket.ajax.attributes.AjaxRequestAttributes#setAllowDefault is renamed to #setPreventDefault WICKET-5197
This is done to make it more consistent with JavaScript API.
org.apache.wicket.ajax.attributes.AjaxRequestAttributes#eventPropagation is now BUBBLE by default WICKET-5198
This is done to make it more consistent with JavaScript API.
org.apache.wicket.ajax.form.AjaxFormValidatingBehavior doesn't use static methods anymore WICKET-5196
To use AjaxFormValidatingBehavior in Wicket 6.x the application code should do something like:
AjaxFormValidatingBehavior.addToAllFormComponents(form, "keydown", Duration.ONE_SECOND);
Due to the usage of static method it wasn't possible to extend this behavior and override for example #updateAjaxAttributes(AjaxRequestAttributes).
The behavior has been reworked a bit to allow this. The new usage is:
form.add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND);
or
formComponent.add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND);
in this case the formComponent's owning Form will be used.
Behavior changes
org.apache.wicket.request.Url#getQueryString WICKET-4664
Url#getQueryString() now behaves as HttpServletRequest behaves :
- returns the query string without the leading "?"
- returns null when there is no query string
RequestUtils#decodeParameters() now strips the "?" from the output value.
org.apache.wicket.request.http.WebResponse encodes the value of the "filename" in Content-Disposition header WICKET-4934
The value of the file name used in "Content-Disposition" response header can contain characters which should be encoded
org.apache.wicket.markup.html.form.FormComponentLabel outputs "required", "disabled" and "error" classes when its form component is either required, disabled or invalid. WICKET-5177
This way it is in sync with AutoLabel (the auto component that is used for "wicket:for" attribute).
org.apache.wicket.markup.html.panel.FeedbackPanel Do not set CSS class on the li > span element for a feedback message WICKET-4831
The css class is now only applied to the li element and not to the span inside. Additionally a FeedbackPanel#newMessageItem() method has been added to allow customization of each feedback message item (similar to DataTable#newRowItem()).
AjaxEventBehavior doesn't prevent the default behavior of the JavaScript event WICKET-5197
From now on only AjaxFallback** components prevent the default JavaScript event behavior so only the Ajax call is made when JavaScript is enabled in the browser.
If the default behavior should be prevented in any use case then use:
attributes.setPreventDefault(true);
Ajax behaviors let JavaScript events bubble by default WICKET-5198
If JavaScript events should not bubble then use:
attributes.setEventPropagation(EventPropagation.STOP);
or:
attributes.setEventPropagation(EventPropagation.STOP_IMMEDIATE);
Deprecated classes/methods/fields are removed WICKET-5201
AbstractDefaultAjaxBehavior's #getSuccessHandler(), #getFailureHandler(), #getChannel() and #getPrecondition() are removed.
They were deprecated since 6.0.0 and were there only for backward compatibility. Use #updateAjaxAttributes() to configure the same functionalities.
The old Tree component in wicket-extensions is removed.
It was based on Swing APIs and many people complained about this. Use the new Tree component introduced in Wicket 6.0.0 instead.
Dependency updates
All libraries on which Wicket modules depend are updated to their latest stable versions.
The most notable ones are:
- Spring Framework 3.2.2
- ASM 4.1
- CGLIB 3.0
- SLF4J 1.7.5
- Jetty (in the quickstart) 8.1.10