It should be possible to specify custom binding prefixes consisting of one character, or even of the empty string, e.g.:
<binding prefix="" service-id="tapestry.bindings.OGNLBindingFactory"/>
<binding prefix="C" service-id="tapestry.bindings.ComponentBindingFactory"/>
This configuration should cause "C:foo" to be equivalent to "component:foo", and ":bar" to be equivalent to "component:bar". However, Tapestry silently ignores prefixes shorter than two characters, treating "C:foo" as a literal even with the above configuration.
Tapestry should do one of two things:
(1) Hopefully this behavior is unintentional. If so, it is due to a dropped minus sign on line 63 of BindingSourceImpl:
if (colonx > 1)
if (colonx > -1)
(2) If this behavior is intentional, BindingSourceImpl should reject any invalid contributions up front instead of ignoring them.