...
These benefits are a great asset to Wicket. Wicket uses the concept of models to provide components with the data that needs to be rendered. Until recently Wicket was Java 1.4 based, and a lot of components suffered from the lack of generified models. Take for instance the ListView
:
Generics Suck!
TBD
Generics are warranted for IModel
but too much verbosity for Component
If there is any place in Wicket which clearly holds typed data, it is the models (the IModel
interface). In practice, one ends up creating a lot of custom components without models, such as different subclasses of MarkupContainer
and possibly Page
, and here the Component
generification just adds more verbosity to the code.
Typically when starting to use a custom component, you start by typing its constructor call, so the constructor of a custom component is a crucial place for making clean and easy APIs. The possibility of giving type arguments to the IModel
instance being passed in there is great, DropDownChoice is a prime example as it also has constructors with a List that needs to contain objects of the same type as the model. However,
Code Block | ||||
---|---|---|---|---|
| ||||
DropDownChoice fruit = new DropDownChoice("fruit", new Model<Fruit>(), Arrays.asList(apple, orange, banana));
|
is better than
Code Block | ||||
---|---|---|---|---|
| ||||
DropDownChoice<Fruit> fruit = new DropDownChoice<Fruit>("fruit", new Model<Fruit>(), Arrays.asList(apple, orange, banana));
|
Also when using 2.0 the experience was that IModel
type was excellent, but Component
type was more like noise. When using 1.3, the lack of types has hardly caused trouble; mostly types would be helpful when first creating a new component. Once you have the component constructed and are calling getModelObject() on it, you're typically sure of what to expect. There have not been difficult problems concerning objects of wrong type inside models.
In this approach, using getModelObject() you cast the same as in 1.3, and for getModel() you can do the necessary casting cleanly, which leaves you in a situation better than in 1.3.
- Timo Rantalaiho
Suggestion 1 - setResponsePage()
signature
...