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; }
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.
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).
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