Author: hlship
Date: Fri Sep  9 15:04:19 2005
New Revision: 279891

URL: http://svn.apache.org/viewcvs?rev=279891&view=rev
Log:
TAPESTRY-556: Literal bindings in template override bindings in specification 
for the same informal parameter

Modified:
    
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java
    jakarta/tapestry/trunk/status.xml

Modified: 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java?rev=279891&r1=279890&r2=279891&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java
 (original)
+++ 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java
 Fri Sep  9 15:04:19 2005
@@ -344,61 +344,64 @@
         // TODO: This is ugly! Need a better/smarter way, even if we have to 
extend BindingSource
         // to tell us.
 
-        boolean literal = binding instanceof LiteralBinding;
+        boolean isLiteral = binding instanceof LiteralBinding;
+        boolean isBound = component.getBinding(name) != null;
+        boolean isFormal = spec.getParameter(name) != null;
 
-        boolean isFormal = (spec.getParameter(name) != null);
-
-        if (isFormal)
+        if (!isFormal)
         {
-            if (component.getBinding(name) != null)
+            if (!spec.getAllowInformalParameters())
             {
-                // Literal bindings in the template that conflict with bound 
parameters
-                // from the spec are silently ignored.
+                // Again; if informal parameters are disallowed, ignore 
literal bindings, as they
+                // are there as placeholders or for WYSIWYG.
 
-                if (literal)
+                if (isLiteral)
                     return false;
 
-                throw new 
ApplicationRuntimeException(ImplMessages.dupeTemplateBinding(
-                        name,
-                        component,
-                        _loadComponent), component, binding.getLocation(), 
null);
+                throw new ApplicationRuntimeException(ImplMessages
+                        .templateBindingForInformalParameter(_loadComponent, 
name, component),
+                        component, binding.getLocation(), null);
             }
 
-            return true;
-        }
+            // If the name is reserved (matches a formal parameter
+            // or reserved name, caselessly), then skip it.
 
-        if (!spec.getAllowInformalParameters())
-        {
-            // Again; if informal parameters are disallowed, ignore literal 
bindings, as they
-            // are there as placeholders or for WYSIWYG.
+            if (spec.isReservedParameterName(name))
+            {
+                // Final case for literals: if they conflict with a reserved 
name, they are ignored.
+                // Again, there for WYSIWYG.
 
-            if (literal)
-                return false;
+                if (isLiteral)
+                    return false;
 
-            throw new 
ApplicationRuntimeException(ImplMessages.templateBindingForInformalParameter(
-                    _loadComponent,
-                    name,
-                    component), component, binding.getLocation(), null);
+                throw new ApplicationRuntimeException(ImplMessages
+                        .templateBindingForReservedParameter(_loadComponent, 
name, component),
+                        component, binding.getLocation(), null);
+            }
         }
 
-        // If the name is reserved (matches a formal parameter
-        // or reserved name, caselessly), then skip it.
+        // So, at this point it doesn't matter if the parameter is a formal 
parameter or
+        // an informal parameter. The binding (if any) in the specification 
takes precendence
+        // over the template. Literal bindings that conflict are considered to 
be there for WYSIWYG
+        // purposes. Non-literal bindings that conflict with a specification 
binding are an
+        // error.
 
-        if (spec.isReservedParameterName(name))
+        if (isBound)
         {
-            // Final case for literals: if they conflict with a reserved name, 
they are ignored.
-            // Again, there for WYSIWYG.
+            // Literal bindings in the template that conflict with bound 
parameters
+            // from the spec are silently ignored.
 
-            if (literal)
+            if (isLiteral)
                 return false;
 
-            throw new 
ApplicationRuntimeException(ImplMessages.templateBindingForReservedParameter(
-                    _loadComponent,
+            throw new 
ApplicationRuntimeException(ImplMessages.dupeTemplateBinding(
                     name,
-                    component), component, binding.getLocation(), null);
+                    component,
+                    _loadComponent), component, binding.getLocation(), null);
         }
 
         return true;
+
     }
 
     private void checkAllComponentsReferenced()

Modified: jakarta/tapestry/trunk/status.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=279891&r1=279890&r2=279891&view=diff
==============================================================================
--- jakarta/tapestry/trunk/status.xml (original)
+++ jakarta/tapestry/trunk/status.xml Fri Sep  9 15:04:19 2005
@@ -54,7 +54,8 @@
       <action type="fix" dev="HLS" fixes-bug="TAPESTRY-341">Report location of 
errors initializing managed beans</action>
       <action type="fix" dev="HLS" fixes-bug="TAPESTRY-270" due-to="Andy 
Hedges">FAQ Code example contains bug</action>
       <action type="fix" dev="HLS" fixes-bug="TAPESTRY-583">Spurious ERROR 
message (probably should be WARN or INFO) when template does not refer to 
components in page spec</action>
-      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-535">Colons in an OGNL 
expression may force it to be intepreted as a literal string, not an 
expression</action>   
+      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-535">Colons in an OGNL 
expression may force it to be intepreted as a literal string, not an 
expression</action>
+      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-556">Literal bindings 
in template override bindings in specification for the same informal 
parameter</action>   
     </release>
     <release version="4.0-beta-6" date="Sep 7 2005">
       <action type="update" dev="HLS" due-to="Henri Yandell">Convert Tapestry 
repository from CVS to SVN</action>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to