The ActionLink
, DirectLink
and Form
components (which make use of
the action and direct
services) inform the application when they have been triggered using listeners.
A listener is an object that implements the IActionListener
interface.
public void actionTriggered(IComponent component, IRequestCycle cycle) throws RequestCycleException;
Prior to release 1.0.2, it was necessary to create an object to be notified by the component; this was almost always an annonymous inner class:
public IActionListener getFormListener() { return new IActionListener() { public void actionTriggered(IComponent component, IRequestCycle cycle) throws RequestCycleException { // perform some operation ... } }; }
Although elegant in theory, that's simply too much Java code for too little effect. Starting with Tapestry 1.0.2, it is possible to create a listener method instead.
A listener method takes the form:
public void method-name
(IRequestCycle cycle)
throws RequestCycleException;
Note | |
---|---|
The throws clause is optional and may be omitted. However, no other exception may be thrown. |
In reality, listener objects have not gone away. Instead, there's a mechanism
whereby a listener object is created automatically when needed.
Each component includes a property, listeners
, that is a collection of
listener objects for the component, synthesized from the available public methods. The
listener objects are properties, with the names corresponding to the method names.
Tip | |
---|---|
The class |
The earlier example is much simpler:
public void formSubmit(IRequestCycle cycle) { // perform some operation ... }
However, the property path for the listener binding must be changed, from formListener
to
listeners.formSubmit
.