Property Expression Language is used in the Property Models to access property values of object wrapped by model. Its syntax is very similar to the Object Graph Navigation Language (OGNL). (Wicket actually used to utilize the OGNL implementation until version 1.1.x. However, later it has been replaced by custom, better-performing, implementation of expression parser).

Current implementation of the property expression parser is represented by the class wicket.util.lang.PropertyResolver. This class supports the following expressions:

Index or map properties can be alternatively written as: "property[index]" or "property[key]".

For example, if we have a following class:

public static class Person {
  private String name;

  private Person parent;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Person getParent() {
    return parent;
  }

  public void setParent(Person parent) {
    this.parent = parent;
  }
}

Then we can use the following expressions:

We started out with OGNL in the past but:
1) OGNL at one point took about 30% processor time of the whole request. We simplified and optimized and wrote OGNL out.
2) We feel it's not the recommended way of programming to rely on property expressions beyond simple navigations
3) By overriding wicket.model.AbstractPropertyModel#onGetObject(wicket.Component) and AbstractPropertyModel#onSetObject(Component, Object) users can provide their own resolving if [necessary].

Eelco Hillenius