boolean isFormal = pspec != null;
String parameterName = isFormal ? pspec.getParameterName() : name;
IBindingSpecification bspec = contained.getBinding(name);
// If not allowing informal parameters, check that each binding
// matches
// a formal parameter.
if (formalOnly && !isFormal)
throw new ApplicationRuntimeException(PageloadMessages
.formalParametersOnly(component, name), component,
bspec.getLocation(), null);
// If an informal parameter that conflicts with a reserved name,
// then skip it.
if (!isFormal && spec.isReservedParameterName(name)) continue;
if (isFormal)
{
if (!name.equals(parameterName))
{
_log.warn(PageloadMessages.usedParameterAlias(contained,
name, parameterName, bspec.getLocation()));
}
else if (pspec.isDeprecated())
_log.warn(PageloadMessages.deprecatedParameter(name, bspec
.getLocation(), contained.getType()));
}
// 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. Note that this is a hold over from the Tapestry 3.0
// DTD
// and will some day no longer be supported.
if (type == BindingType.INHERITED)
{
QueuedInheritedBinding queued = new QueuedInheritedBinding(
component, bspec.getValue(), parameterName);
_inheritedBindingQueue.add(queued);
continue;
}
String description = PageloadMessages.parameterName(name);