DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
| Excerpt | ||
|---|---|---|
| ||
How to make your custom component accept and pass on all unknown parameters to the underlying HTML element |
| Div | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
|
...
In the example below we create an Img component, a custom replacement for the <img> tag. Its src parameter will be an asset. We'll use the @SupportsInformalParameters annotation to tell Tapestry that the component should support informal parameters.
| Code Block | ||||
|---|---|---|---|---|
| ||||
@SupportsInformalParameters
public class Img
{
@Parameter(required=true, allowNull=false, defaultPrefix=BindingConstants.ASSET)
private Asset src;
@Inject
private ComponentResources resources;
boolean beginRender(MarkupWriter writer)
{
writer.element("img", "src", src);
resources.renderInformalParameters(writer);
writer.end();
return false;
}
}
|
...
Another, equivalent, approach is to use the RenderInformals mixin (:
| Code Block | ||||
|---|---|---|---|---|
| ||||
public class Img
{
@Parameter(required=true, allowNull=false, defaultPrefix=BindingConstants.ASSET)
private Asset src;
@Mixin
private RenderInformals renderInformals;
void beginRender(MarkupWriter writer)
{
writer.element("img", "src", src);
}
boolean beforeRenderBody(MarkupWriter writer)
{
writer.end();
return false;
}
}
|
This variation splits the rendering of the tag in two pieces, so that the RenderInformals mixin can operate (after beginRender() and before beforeRenderBody()).
Approach 3: Extend the "Any" component
Another approach is to have your component class extend Tapestry's Any component, which already supports informal parameters:
| Code Block | ||||
|---|---|---|---|---|
| ||||
public class Img extends Any { ... } |