ViewModel
Indicates that an object belongs to the UI/application layer and is intended to be used as a view-model.Naturally this also allows for the idiom of passing in the ServiceInjector as an argument and programmatically resolve any field-style injection points via ServiceInjector#injectServicesInto(Object) , that is, if already required during construction .
Instances of ViewModel must include (at least) one public constructor.
Contract:
- 
there is either exactly one public constructor or if there are more than one, then only one of these is annotated with any of @Inject or @Autowired(required=true) (meta-annotations are also considered) 
- 
the constructor may have arbitrary many arguments of arbitrary type 
- 
first String argument found is passed in the view-model’s memento 
- 
any other arguments are resolved via the ServiceRegistry - if no Bean can be found a NoSuchElementException is thrown 
- 
there is no support for Spring programming model specific annotations on constructor arguments (perhaps future work) 
After a view-model got new-ed up by the framework (or programmatically via the FactoryService ), ServiceInjector#injectServicesInto(Object) is called on the viewmodel instance, regardless of what happened during construction .
API
interface ViewModel {
  String viewModelMemento()     (1)
}| 1 | viewModelMemento() Obtain a memento of the view-model. (Optional) | 
Members
viewModelMemento()
Obtain a memento of the view-model. (Optional)
Captures the state of this view-model as String , which can be passed in to this view-model’s constructor for later re-construction.
The framework automatically takes care of non-URL-safe strings, by passing them through java.net.URLEncoder / java.net.URLDecoder for encoding and decoding respectively.