You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2006/09/02 13:26:16 UTC

svn commit: r439574 - in /cocoon: branches/BRANCH_2_1_X/ trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/

Author: vgritsenko
Date: Sat Sep  2 04:26:15 2006
New Revision: 439574

URL: http://svn.apache.org/viewvc?rev=439574&view=rev
Log:
    <action dev="VG" type="fix">
      CForms: Repeater identity binding was failing on save if widget path was
      given.
    </action>
    <action dev="VG" type="fix">
      CForms: Inherit fb:on-delete-row, fb:on-insert-row, fb:identity repeater
      bindings from the parent. Fix detection of 'simple' mode.
    </action>


Modified:
    cocoon/branches/BRANCH_2_1_X/status.xml
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBindingBuilder.java

Modified: cocoon/branches/BRANCH_2_1_X/status.xml
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/status.xml?rev=439574&r1=439573&r2=439574&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Sat Sep  2 04:26:15 2006
@@ -184,8 +184,17 @@
   <release version="@version@" date="@date@">
 -->
   <release version="2.1.10" date="TBD">
+    <action dev="VG" type="fix">
+      CForms: Repeater identity binding was failing on save if widget path was
+      given.
+    </action>
+    <action dev="VG" type="fix">
+      CForms: Inherit fb:on-delete-row, fb:on-insert-row, fb:identity repeater
+      bindings from the parent. Fix detection of 'simple' mode.
+    </action>
     <action dev="AN" type="add">
-      ZipArchiveSerializer: Set time stamp of ZIP entries to last modification time of source file.
+      ZipArchiveSerializer: Set time stamp of ZIP entries to last modification
+      time of source file.
     </action>
     <action dev="AG" type="update">
       Updated ehcache to 1.2.2.
@@ -206,7 +215,7 @@
       Core: CopySourceAction generate NPE.
     </action>
     <action dev="AG" type="fix" fixes-bug="COCOON-1849" due-to="Mark Lundquist" due-to-email="mlundquist2@comcast.net">
-      CForms: debug logging left in AggregateFieldDefinitionBuilder.java.
+      CForms: Removed debug logging left in AggregateFieldDefinitionBuilder.java.
     </action>
     <action dev="MPO" type="fix" fixes-bug="COCOON-1687" >
       CForms: Reverting incompatible change introduced in version 2.1.9.  When binding a widget with value null, XML

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java?rev=439574&r1=439573&r2=439574&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java Sat Sep  2 04:26:15 2006
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -43,7 +43,7 @@
  * @version $Id$
  */
 public class RepeaterJXPathBinding extends JXPathBindingBase {
-    
+
     private final String repeaterId;
     private final String repeaterPath;
     private final String rowPath;
@@ -52,7 +52,7 @@
     private final JXPathBindingBase insertRowBinding;
     private final JXPathBindingBase deleteRowBinding;
     private final ComposedJXPathBindingBase identityBinding;
-    
+
     /**
      * Constructs RepeaterJXPathBinding
      */
@@ -67,17 +67,17 @@
         this.repeaterPath = repeaterPath;
         this.rowPath = rowPath;
         this.rowPathForInsert = rowPathForInsert;
-        
+
         this.rowBinding = new ComposedJXPathBindingBase(
                 JXPathBindingBuilderBase.CommonAttributes.DEFAULT,
                 childBindings);
         this.rowBinding.setParent(this);
-        
+
         this.insertRowBinding = insertBinding;
         if (this.insertRowBinding != null) {
             this.insertRowBinding.setParent(this);
         }
-        
+
         if (deleteBindings != null) {
             this.deleteRowBinding = new ComposedJXPathBindingBase(
                     JXPathBindingBuilderBase.CommonAttributes.DEFAULT,
@@ -86,10 +86,10 @@
         } else {
             this.deleteRowBinding = null;
         }
-        
-        
+
+
         if (identityBindings != null) {
-            
+
             this.identityBinding = new ComposedJXPathBindingBase(
                     JXPathBindingBuilderBase.CommonAttributes.DEFAULT,
                     identityBindings);
@@ -98,7 +98,7 @@
         else
             this.identityBinding = null;
     }
-    
+
     public String getId() { return repeaterId; }
     public String getRepeaterPath() { return repeaterPath; }
     public String getRowPath() { return rowPath; }
@@ -107,7 +107,7 @@
     public ComposedJXPathBindingBase getDeleteRowBinding() { return (ComposedJXPathBindingBase)deleteRowBinding; }
     public ComposedJXPathBindingBase getIdentityBinding() { return identityBinding; }
     public JXPathBindingBase getInsertRowBinding() { return insertRowBinding; }
-    
+
     /**
      * Binds the unique-id of the repeated rows, and narrows the context on
      * objectModelContext and Repeater to the repeated rows before handing
@@ -121,15 +121,15 @@
             throw new BindingException("The repeater with the ID [" + this.repeaterId
                     + "] referenced in the binding does not exist in the form definition.");
         }
-        
+
         if (repeater.isPageable()) {
             PageStorage pageStorage = new PageStorage(repeater,jxpc);
             pageStorage.doPageLoad();
             return;
         }
-        
+
         repeater.clear();
-        
+
         Pointer ptr = jxpc.getPointer(this.repeaterPath);
         if (ptr.getNode() != null) {
             // There are some nodes to load from
@@ -161,7 +161,7 @@
         if (getLogger().isDebugEnabled())
             getLogger().debug("done loading rows " + toString());
     }
-    
+
     /**
      * Uses the mapped identity of each row to detect if rows have been
      * updated, inserted or removed.  Depending on what happened the appropriate
@@ -171,29 +171,29 @@
     throws BindingException {
         // Find the repeater
         Repeater repeater = (Repeater) selectWidget(frmModel, this.repeaterId);
-        
+
         if (repeater.isPageable()) {
-            jxpc = repeater.getStorage().doSave();
+            repeater.getStorage().doSave();
             return;
         }
-        
+
         // and his context, creating the path if needed
         JXPathContext repeaterContext =
             jxpc.getRelativeContext(jxpc.createPath(this.repeaterPath));
-        
+
         // create set of updatedRowIds
         Set updatedRows = new HashSet();
         //create list of rows to insert at end
         List rowsToInsert = new ArrayList();
-        
+
         // iterate rows in the form model...
         int formRowCount = repeater.getSize();
         for (int i = 0; i < formRowCount; i++) {
             Repeater.RepeaterRow thisRow = repeater.getRow(i);
-            
+
             // Get the identity
             List identity = getIdentity(thisRow);
-            
+
             if (hasNonNullElements(identity)) {
                 // iterate nodes to find match
                 Iterator rowPointers = repeaterContext.iteratePointers(this.rowPath);
@@ -323,7 +323,7 @@
 
     /**
      * Get the identity of the given row context. That's infact a list of all
-     * the values of the fields in the bean or XML that constitute the identity. 
+     * the values of the fields in the bean or XML that constitute the identity.
      * @param rowContext
      * @return List the identity of the row context
      */
@@ -356,14 +356,14 @@
                     }
                 }
                 identity.add(value);
-            }   
+            }
         }
         return identity;
     }
 
     /**
-     * Get the identity of the given row. That's infact a list of all the values
-     * of the fields in the form model that constitute the identity. 
+     * Get the identity of the given row. That's in fact a list of all the values
+     * of the fields in the form model that constitute the identity.
      * @param row
      * @return List the identity of the row
      */
@@ -372,15 +372,15 @@
         if (this.identityBinding == null) {
             return Collections.EMPTY_LIST;
         }
-        
+
         List identity = new ArrayList();
 
         JXPathBindingBase[] childBindings = this.identityBinding.getChildBindings();
         if (childBindings != null) {
             int size = childBindings.length;
             for (int i = 0; i < size; i++) {
-                String fieldId = ((ValueJXPathBinding)childBindings[i]).getFieldId();
-                Widget widget = row.getChild(fieldId);
+                String fieldId = ((ValueJXPathBinding) childBindings[i]).getFieldId();
+                Widget widget = row.lookupWidget(fieldId);
                 Object value = widget.getValue();
                 identity.add(value);
             }
@@ -390,7 +390,7 @@
 
     public String toString() {
         return "RepeaterJXPathBinding [widget=" + this.repeaterId +
-        ", xpath=" + this.repeaterPath + "]";
+                ", xpath=" + this.repeaterPath + "]";
     }
 
     public void enableLogging(Logger logger) {
@@ -420,11 +420,11 @@
 
             this.repeater.setStorage(this);
             this.updatedRows = new HashMap();
-            
+
             /*
              * workaround for jxpath doesn't simply calls size() on count(..) using collections
              */
-            
+
             int collectionSize = 0;
             Object value = storageContext.getValue(rowPath);
             if (value != null) {
@@ -463,7 +463,7 @@
                     }
                     if (identityBinding != null) {
                         identityBinding.loadFormFromModel(thisRow, rowContext);
-                    } 
+                    }
                     rowBinding.loadFormFromModel(thisRow, rowContext);
                 }
             }
@@ -481,7 +481,7 @@
 
                 // Get the identity
                 List identity = getIdentity(thisRow);
-                
+
                 if (hasNonNullElements(identity)) {
                     // iterate nodes to find match
                     Iterator rowPointers = repeaterContext.iteratePointers(rowPath + getPaginationClause());
@@ -496,9 +496,9 @@
                 }
             }
         }
-        
+
         public JXPathContext doSave() throws BindingException {
-            
+
             // iterate context and saveToModel
             Iterator rowPointers = this.storageContext.iteratePointers(rowPath);
             while (rowPointers.hasNext()) {
@@ -514,32 +514,31 @@
             }
             return this.storageContext;
         }
-        
+
         private String getPaginationClause() {
-            String paginationClause = "";
+            String paginationClause;
             int start = repeater.getCurrentPage() * repeater.getPageSize();
             int end = start + repeater.getPageSize() + 1;
             paginationClause = "[position() > " + start + " and position() < " + end + "]";
             return paginationClause;
         }
-        
+
         private boolean isIdentityInUpdatedRows(List identity) {
             return this.updatedRows.containsKey(identity);
         }
-        
+
         public int getMaxPage() {
             return this.maxPage;
         }
-        
+
         private class RowStore {
             private HashMap values;
-            private boolean deleted;
-            
+
             public RowStore(RepeaterRow repeaterRow) {
                 this.values = new HashMap();
                 this.storeRow(repeaterRow);
             }
-            
+
             private void recallRow(RepeaterRow repeaterRow) {
                 Iterator iterator = values.keySet().iterator();
                 while (iterator.hasNext()) {
@@ -547,7 +546,7 @@
                     repeaterRow.lookupWidget(key).setValue(values.get(key));
                 }
             }
-            
+
             private void storeRow(RepeaterRow repeaterRow) {
                Iterator iterator = repeaterRow.getChildren();
                while (iterator.hasNext()) {
@@ -555,9 +554,9 @@
                    values.put(widget.getName(),widget.getValue());
                }
             }
-            
+
         }
 
     }
-    
+
 }

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBindingBuilder.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBindingBuilder.java?rev=439574&r1=439573&r2=439574&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBindingBuilder.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBindingBuilder.java Sat Sep  2 04:26:15 2006
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -53,7 +53,7 @@
  * @version $Id$
  */
 public class RepeaterJXPathBindingBuilder extends JXPathBindingBuilderBase {
-    
+
     /**
      * Creates an instance of {@link RepeaterJXPathBinding} according to the
      * attributes and nested comfiguration elements of the bindingElm.
@@ -63,133 +63,121 @@
      * @return JXPathBindingBase
      */
     public JXPathBindingBase buildBinding(Element bindingElm,
-            JXPathBindingManager.Assistant assistant) throws BindingException {
-        
+                                          JXPathBindingManager.Assistant assistant)
+    throws BindingException {
+
         if (bindingElm.hasAttribute("unique-row-id")) {
             throw new BindingException("Attribute 'unique-row-id' is no more supported, use <fb:identity> instead",
-                    LocationAttributes.getLocation(bindingElm));
+                                       LocationAttributes.getLocation(bindingElm));
         }
 
         if (bindingElm.hasAttribute("unique-path")) {
             throw new BindingException("Attribute 'unique-path' is no more supported, use <fb:identity> instead",
-                    LocationAttributes.getLocation(bindingElm));
+                                       LocationAttributes.getLocation(bindingElm));
         }
 
         try {
             CommonAttributes commonAtts =
                 JXPathBindingBuilderBase.getCommonAttributes(bindingElm);
 
-            String repeaterId = DomHelper.getAttribute(bindingElm, "id", null);
+            String repeaterId =
+                    DomHelper.getAttribute(bindingElm, "id", null);
             String parentPath =
-                DomHelper.getAttribute(bindingElm, "parent-path", null);
-            String rowPath = DomHelper.getAttribute(bindingElm, "row-path", null);
+                    DomHelper.getAttribute(bindingElm, "parent-path", null);
+            String rowPath =
+                    DomHelper.getAttribute(bindingElm, "row-path", null);
             String rowPathForInsert =
-                DomHelper.getAttribute(bindingElm, "row-path-insert", rowPath);
-            
-//          do inheritance
-            RepeaterJXPathBinding otherBinding = (RepeaterJXPathBinding)assistant.getContext().getSuperBinding();
+                    DomHelper.getAttribute(bindingElm, "row-path-insert", rowPath);
+
+            // retrieve inherited bindings
             JXPathBindingBase[] existingOnBind = null;
             JXPathBindingBase[] existingOnDelete = null;
             JXPathBindingBase[] existingOnInsert = null;
             JXPathBindingBase[] existingIdentity = null;
-            if(otherBinding!=null) {
-            	commonAtts = JXPathBindingBuilderBase.mergeCommonAttributes(otherBinding.getCommonAtts(),commonAtts);
-            	
-            	if(repeaterId==null)
-            		repeaterId = otherBinding.getId();
-            	if(parentPath==null)
-            		parentPath = otherBinding.getRepeaterPath();
-            	if(rowPath==null)
-            		rowPath = otherBinding.getRowPath();
-            	if(rowPathForInsert==null)
-            		rowPathForInsert = otherBinding.getInsertRowPath();
-            	
-            	if(otherBinding.getRowBinding() != null)
-            		existingOnBind = otherBinding.getRowBinding().getChildBindings();
-            	if(otherBinding.getDeleteRowBinding() != null)
-            		existingOnDelete = otherBinding.getDeleteRowBinding().getChildBindings();
-            	if(otherBinding.getIdentityBinding() != null)
-            		existingIdentity = otherBinding.getIdentityBinding().getChildBindings();
-            	if(otherBinding.getInsertRowBinding() != null)
-            		existingOnInsert = new JXPathBindingBase[] { otherBinding.getInsertRowBinding() };
+
+            RepeaterJXPathBinding otherBinding = (RepeaterJXPathBinding)assistant.getContext().getSuperBinding();
+            if (otherBinding != null) {
+            	commonAtts = JXPathBindingBuilderBase.mergeCommonAttributes(otherBinding.getCommonAtts(), commonAtts);
+
+                if (repeaterId == null)
+                    repeaterId = otherBinding.getId();
+                if (parentPath == null)
+                    parentPath = otherBinding.getRepeaterPath();
+                if (rowPath == null)
+                    rowPath = otherBinding.getRowPath();
+                if (rowPathForInsert == null)
+                    rowPathForInsert = otherBinding.getInsertRowPath();
+
+                if (otherBinding.getRowBinding() != null)
+                    existingOnBind = otherBinding.getRowBinding().getChildBindings();
+                if (otherBinding.getDeleteRowBinding() != null)
+                    existingOnDelete = otherBinding.getDeleteRowBinding().getChildBindings();
+                if (otherBinding.getIdentityBinding() != null)
+                    existingIdentity = otherBinding.getIdentityBinding().getChildBindings();
+                if (otherBinding.getInsertRowBinding() != null)
+                    existingOnInsert = new JXPathBindingBase[]{otherBinding.getInsertRowBinding()};
             }
 
-            // Simple mode will be used if no fb:identity, fb:on-bind, fb:on-delete-row, fb:on-insert-row exists.
-            // in that case, the children of fb:repeater will be used as child bindings
+            // Simple mode will be used if no fb:identity, fb:on-bind, fb:on-delete-row,
+            // or fb:on-insert-row exists in this or inherited binding definitions.
+            // In that case, the children of fb:repeater will be used as child bindings.
             boolean simpleMode = true;
+
             Element childWrapElement =
-                DomHelper.getChildElement(bindingElm, BindingManager.NAMESPACE, "on-bind");
-            
-            if (childWrapElement != null) simpleMode = false;
-            
+                    DomHelper.getChildElement(bindingElm, BindingManager.NAMESPACE, "on-bind");
             JXPathBindingBase[] childBindings =
-                assistant.makeChildBindings(childWrapElement,existingOnBind);
-            if(childBindings == null)
-            	childBindings = existingOnBind;
-
-            Element deleteWrapElement = DomHelper.getChildElement(bindingElm,
-                    BindingManager.NAMESPACE, "on-delete-row");
-            
-            if (deleteWrapElement != null) simpleMode = false;
+                    assistant.makeChildBindings(childWrapElement, existingOnBind);
+            if (childWrapElement != null) {
+                // Not checking existingOnBind!=null here because parent can be in 'simpleMode'.
+                simpleMode = false;
+            }
 
             JXPathBindingBase[] deleteBindings = null;
-            if (deleteWrapElement != null) {
+            Element deleteWrapElement =
+                    DomHelper.getChildElement(bindingElm, BindingManager.NAMESPACE, "on-delete-row");
+            if (deleteWrapElement != null || existingOnDelete != null) {
                 deleteBindings =
                     assistant.makeChildBindings(deleteWrapElement,existingOnDelete);
-                if(deleteBindings == null)
-                	deleteBindings = existingOnDelete;
+                simpleMode = false;
             }
 
-            Element insertWrapElement = DomHelper.getChildElement(bindingElm,
-                    BindingManager.NAMESPACE, "on-insert-row");
-            
-            if (insertWrapElement != null) simpleMode = false;
-
             JXPathBindingBase insertBinding = null;
-            if (insertWrapElement != null) {
+            Element insertWrapElement =
+                    DomHelper.getChildElement(bindingElm, BindingManager.NAMESPACE, "on-insert-row");
+            if (insertWrapElement != null || existingOnInsert != null) {
                 insertBinding =
-                    assistant.makeChildBindings(insertWrapElement,existingOnInsert)[0];
-                    // TODO: we now safely take only the first element here,
-                    // but we should in fact send out a warning to the log 
-                    // if more were available!
-                if(insertBinding == null && existingOnInsert != null)
-                	insertBinding = existingOnInsert[0];
+                    assistant.makeChildBindings(insertWrapElement, existingOnInsert)[0];
+                simpleMode = false;
             }
 
-            Element identityWrapElement = DomHelper.getChildElement(bindingElm,
-                    BindingManager.NAMESPACE, "identity");
-            
-            if (identityWrapElement != null) simpleMode = false;
-
             JXPathBindingBase[] identityBinding = null;
-            if (identityWrapElement != null) {
+            Element identityWrapElement =
+                    DomHelper.getChildElement(bindingElm, BindingManager.NAMESPACE, "identity");
+            if (identityWrapElement != null || existingIdentity != null) {
                 // TODO: we can only handle ValueJXPathBinding at the moment:
                 // http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=107906438632484&w=4
                 identityBinding =
-                    assistant.makeChildBindings(identityWrapElement,existingIdentity);
-                if (identityBinding != null) {
-                    for (int i = 0; i < identityBinding.length;i++) {
-                        if (!(identityBinding[i] instanceof ValueJXPathBinding)) {
-                            throw new BindingException("Error building repeater binding defined at " +
-                                    DomHelper.getLocation(bindingElm) + ": Only value binding (i.e. fb:value) " +
-                                    "can be used inside fb:identity at the moment. You can read " +
-                                    "http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=107906438632484&w=4" +
-                                    " if you want to know more on this.");
-                        }
+                    assistant.makeChildBindings(identityWrapElement, existingIdentity);
+                for (int i = 0; i < identityBinding.length;i++) {
+                    if (!(identityBinding[i] instanceof ValueJXPathBinding)) {
+                        throw new BindingException("Error building repeater binding defined at " +
+                                DomHelper.getLocation(bindingElm) + ": Only value binding (i.e. fb:value) " +
+                                "can be used inside fb:identity at the moment. You can read " +
+                                "http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=107906438632484&w=4" +
+                                " if you want to know more on this.");
                     }
-                } else {
-                	identityBinding = existingIdentity;
                 }
+                simpleMode = false;
             }
-            
+
             if (simpleMode) {
                 // Use the children of the current element
-                childBindings = assistant.makeChildBindings(bindingElm,existingOnBind);
+                childBindings = assistant.makeChildBindings(bindingElm, existingOnBind);
             }
 
             RepeaterJXPathBinding repeaterBinding =
                 new RepeaterJXPathBinding(commonAtts, repeaterId, parentPath,
-                        rowPath, rowPathForInsert, 
+                        rowPath, rowPathForInsert,
                         childBindings, insertBinding, deleteBindings, identityBinding);
             return repeaterBinding;
         } catch (BindingException e) {



Re: svn commit: r439574 - in /cocoon: branches/BRANCH_2_1_X/ trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/

Posted by Vadim Gritsenko <va...@reverycodes.com>.
Jean-Baptiste Quenot wrote:
> * vgritsenko@apache.org:
>> Author: vgritsenko
>> Date: Sat Sep  2 04:26:15 2006
>> New Revision: 439574
>>
>>     <action dev="VG" type="fix">
>>       CForms: Repeater identity binding was failing on save if widget path was
>>       given.
>>     </action>
>>
> 
> Hi Vadim,
> 
> If that fixes the problems with <fb:identity>, that's great!
> During Cocoon trainings I was often asked why <fb:identity> didn't
> work as advertised.  This is good news for our users then.

This commit fixes an exception which was happening when you use widget path:

   <fb:identity>
     <fb:value id="path/to/widget" path="widget"/>

It might your problems, or it might not - I don't know.


Vadim

Re: svn commit: r439574 - in /cocoon: branches/BRANCH_2_1_X/ trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/

Posted by Jean-Baptiste Quenot <jb...@apache.org>.
* vgritsenko@apache.org:
> Author: vgritsenko
> Date: Sat Sep  2 04:26:15 2006
> New Revision: 439574
> 
> URL: http://svn.apache.org/viewvc?rev=439574&view=rev
> Log:
>     <action dev="VG" type="fix">
>       CForms: Repeater identity binding was failing on save if widget path was
>       given.
>     </action>
>     <action dev="VG" type="fix">
>       CForms: Inherit fb:on-delete-row, fb:on-insert-row, fb:identity repeater
>       bindings from the parent. Fix detection of 'simple' mode.
>     </action>
> 
> 
> Modified:
>     cocoon/branches/BRANCH_2_1_X/status.xml
>     cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java
>     cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/RepeaterJXPathBindingBuilder.java

Hi Vadim,

If that fixes the problems with <fb:identity>, that's great!
During Cocoon trainings I was often asked why <fb:identity> didn't
work as advertised.  This is good news for our users then.

Thanks again!
-- 
     Jean-Baptiste Quenot
aka  John Banana Qwerty
http://caraldi.com/jbq/