{
String name = (String) i.next();
boolean isFormal = spec.getParameter(name) != null;
IBindingSpecification bspec = contained.getBinding(name);
// If not allowing informal parameters, check that each binding matches
// a formal parameter.
if (formalOnly && !isFormal)
throw new ApplicationRuntimeException(
Tapestry.format(
"PageLoader.formal-parameters-only",
component.getExtendedId(),
name),
component,
bspec.getLocation(),
null);
// If an informal parameter that conflicts with a reserved name, then
// skip it.
if (!isFormal && spec.isReservedParameterName(name))
continue;
// The type determines how to interpret the value:
// As a simple static String
// As a nested property name (relative to the component)
// As the name of a binding inherited from the containing component.
// As the name of a public field
// As a script for a listener
BindingType type = bspec.getType();
// For inherited bindings, defer until later. This gives components
// a chance to setup bindings from static values and expressions in the
// template. The order of operations is tricky, template bindings come
// later.
if (type == BindingType.INHERITED)
{
QueuedInheritedBinding queued =
new QueuedInheritedBinding(component, bspec.getValue(), name);
_inheritedBindingQueue.add(queued);
continue;
}
if (type == BindingType.LISTENER)