Type Coercion is the conversion of one type of object to a new object of a different type with similar content. Tapestry frequently must coerce objects from one type to another. A common example is the coercion of a string into an integer or a double.
See Type Coercer Service for the list of build-in coercions.
Parameter Type Coercions
Wiki Markup |
---|
{float} {float:right|background=#eee} {contentbylabel:title=Related Articles|showLabels=false|showSpace=false|space=@self|labels=coercion,parameters} {float} |
Tapestry automatically handles type coercions for component parameters.
Type coercions occur when a value passed into a parameter (as bound in a template or in an annotation) does not match the type of the parameter.
For example, consider the Count component:
Code Block | ||
---|---|---|
| ||
public class Count { @Parameter private int start = 1; @Parameter(required = true) private int end; @Parameter private int value; . . . |
Here, the type of all three parameters is int
.
However, it is likely that the component will be used as so:
Code Block | ||
---|---|---|
| ||
Merry Christmas: <t:count end="3"> Ho! </t:count> |
A bare whole number is interpreted by the prop binding prefix as a long
. So this is the long value 3.
Tapestry will automatically coerce the bound value, a long
, to the parameter's type, int
. This may be a lossy coercion (if the long
represents a number larger than can be stored in an int
).
TypeCoercer Service
Main Article: TypeCoercer Service
The TypeCoercer service is responsible for this type coercion. This service is part of the tapestry-ioc module. The service is quite extensible, allowing for new types and coercions to be added easily. The TapestryModule contributes a few additional coercions into the TypeCoercer service.