You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ta...@jakarta.apache.org> on 2005/09/10 00:04:30 UTC

[jira] Updated: (TAPESTRY-556) Literal bindings in template override bindings in specification for the same informal parameter

     [ http://issues.apache.org/jira/browse/TAPESTRY-556?page=all ]

Howard M. Lewis Ship updated TAPESTRY-556:
------------------------------------------

    Summary: Literal bindings in template override bindings in specification for the same informal parameter  (was: a binding in template overrides another binding in specification for the same informal parameter)

> Literal bindings in template override bindings in specification for the same informal parameter
> -----------------------------------------------------------------------------------------------
>
>          Key: TAPESTRY-556
>          URL: http://issues.apache.org/jira/browse/TAPESTRY-556
>      Project: Tapestry
>         Type: Bug
>     Versions: 4.0
>  Environment: WinXP
>     Reporter: Kent Tong
>     Assignee: Howard M. Lewis Ship

>
> If there is a (literal) binding in the template (for WYSIWYG purpose) for an informal parameter, then even if another (ognl) binding is specified in the specification for the same parameter, the literal binding will win. For example:
> Test.html:
> <span jwcid="sample" style="color: red">foo</span>  <!-- this binding will win -->
> Test.page:
> <page-specification class="Test">
>   <component id="sample" type="Any">
>      <binding name="style" value="ognl:color"/>  <!-- this binding will be overridden -->
>   </component>
> </page-specification>
> Test.java
> class Test {
>   public String getColor() {  //this method is never called.
>     ...
>   }
> }
> The bug is in the validate() method in ComponentTemplateLoaderLogic. This method only checks for: 1) formal parameter; 2) reserved parameter; 3) allow-informal-parameter is no. It doesn't check if a binding has been provided for an informal parameter in the specification.
> public class ComponentTemplateLoaderLogic 
> {
>     private boolean validate(IComponent component, IComponentSpecification spec, String name,
>             IBinding binding)
>     {
>         boolean literal = binding instanceof LiteralBinding;
>         boolean isFormal = (spec.getParameter(name) != null);
>         if (isFormal)
>         {
>             if (component.getBinding(name) != null)
>             {
>                 if (literal)
>                     return false;
>                 throw new ApplicationRuntimeException(ImplMessages.dupeTemplateBinding(
>                         name,
>                         component,
>                         _loadComponent), component, binding.getLocation(), null);
>             }
>             return true;
>         }
>         if (!spec.getAllowInformalParameters())
>         {
>             if (literal)
>                 return false;
>             throw new ApplicationRuntimeException(ImplMessages.templateBindingForInformalParameter(
>                     _loadComponent,
>                     name,
>                     component), component, binding.getLocation(), null);
>         }
>         if (spec.isReservedParameterName(name))
>         {
>             if (literal)
>                 return false;
>             throw new ApplicationRuntimeException(ImplMessages.templateBindingForReservedParameter(
>                     _loadComponent,
>                     name,
>                     component), component, binding.getLocation(), null);
>         }
>         return true;
>     }
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org