Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Deprecate org.apache.wicket.util.IProvider WICKET-6060 

Replace it with standard Java 8 java.util.function.Supplier<T> which is virtually identical.

IGenericComponent's setter methods now return the current instance for method chaining

All specialization classes return their type.

AjaxFallback** components now use java.util.Optional  WICKET-6104 

All AjaxFallback** components and the containers which use internally AjaxFallback** components, like AjaxTabbedPanel, RatingPanel and TableTree, have been reworked to pass Optional<AjaxRequestTarget> instead of just AjaxRequestTarget to their onXyz() callback methods. This way the application developer should not forget to check that the AjaxRequestTarget is not null. 

Behavior changes

FormComponentPanel delegates the call to #clearInput to its FormComponent children WICKET-6114 

FormComponent#clearInput() has been made non-final, so that now containers like FormComponentPanel could override this method and call #clearInput() on its children of type FormComponent.

Removals

...

IModel uses Java 8 default interface method for IDetachable#detach()  WICKET-6115 

For convenience IModel class provides a do-nothing implementation of IDetachable#detach() method, so custom implementations are not required to implement it when not needed.

ResourceStreamResource now receives Attributes as a parameter to its #getResourceStream() method WICKET-6113 

For access to the response, the request and its parameters now ResourceStreamResource#getResourceStream() receives an instance of org.apache.wicket.request.resource.IResource.Attributes.

 

Provide serializable versions of java.util.function.(Supplier|Consumer|Function) WICKET-5991 

java.util.function.Consumer and other classes are not serializable and this makes them unusable in stateful Wicket pages. For this reason Wicket provides org.apache.wicket.model.lambda.WicketSupplier, org.apache.wicket.model.lambda.WicketConsumer and org.apache.wicket.model.lambda.WicketFunction. Those interfaces should be used in method signatures where Java 8 lambdas or method references could be used. At the call site there is nothing specific to be done, i.e. just use lambdas and method references without any casting.

 

Provide IModel implementations which make use of Java 8 lambdas and method references WICKET-5991 

Wicket provides three new implementations of IModel which use Java 8 consumers and suppliers, i.e. may be used with lambda or method references.

  • org.apache.wicket.model.lambda.LambdaModel.

    Code Block
    languagejava
    titleLambdaModel
    collapsetrue
    Person person = ...;
    IModel<String> personNameModel = new LambdaModel<>(
          () -> person.getName(),
          (name) -> person.setName(name));
  • org.apache.wicket.model.lambda.SupplierModel. It is similar to org.apache.wicket.model.AbstractReadOnlyModel.

    Code Block
    languagejava
    titleSupplierModel
    collapsetrue
    Person person = ...;
    IModel<String> personNameModel = new SupplierModel<>(person::getName);
  • org.apache.wicket.model.lambda.SupplierCachingModel. It is similar to org.apache.wicket.model.LoadableDetachableModel 

    Code Block
    languagejava
    titleSupplierCachingModel
    collapsetrue
    Person person = ...;
    IModel<String> personNameModel = new SupplierCachingModel<>(person::getName);

IGenericComponent is a mixin/trait interface WICKET-6117 

IGenericComponent uses Java 8 default methods to implement #setModel(IModel<T>), #getModel(), #setModelObject(T) and #getModelObject() by delegating to the respective get/setDefaultModel[Object] methods.

This way it could be easily used by any Component by just implementing it.

...