22.214.171.124.6. Controller Dependency Injection
This is a legacy API. For the new API available since v.7.0, see Screen Controllers.
Dependency Injection in controllers can be used to acquire references to utilized objects. For this purpose it is required to declare either a field of the corresponding type or a write access method (setter) with an appropriate parameter type and with one of the following annotations:
@Inject– the simplest option, where an object for injection will be found according to the field/method type and the name of the field or attribute corresponding to the method according to JavaBeans rules.
@Named("someName")– explicitly defines the name of the target object.
The following objects can be injected into controllers:
This screen’s visual components defined in the XML-descriptor. If the attribute type is derived from
Component, the system will search for a component with the corresponding name within the current screen.
Actions defined in the XML-descriptor – see Actions.
Datasources defined in the XML-descriptor. If the attribute type is derived from
Datasource, the system will search for a datasource with the corresponding name in the current screen.
UserSession. If the attribute type is UserSession, the system will inject an object of the current user session.
DsContext. If the attribute type is
DsContext, the system will inject the
DsContextof the current screen.
WindowContext. If the attribute type is
WindowContext, the system will inject the
WindowContextof the current screen.
DataSupplier. If the attribute type is DataSupplier, the corresponding instance will be injected.
Any bean defined in the context of a given client block, including:
If nothing of the mentioned above is appropriate and the controller has companions, a companion for the current client type will be injected, if the types match.
It is possible to inject parameters passed in a map to the
init() method into the controller using
@WindowParam annotation. The annotation has the
name attribute which contains the parameter name (a key in the map) and an optional required attribute. If
required = true and the map does not contain the corresponding parameter a
WARNING message is added to the log.
An example of the injection of a
Job entity passed to the controller’s
@WindowParam(name = "job", required = true) protected Job job;