You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

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:

MyResourceReference.java
@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:

MyComponent.java
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"):

MyComponent.java
StringResourceModel model = new StringResourceModel(resourceKey, model, Model.of("Some default value"), new Object[] [param1, param2]);

Behavior changes

org.apache.wicket.request.Url#getQueryString WICKET-4774

TODO

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

  • No labels