Ajax errror when an active state widget become invisible state widget
---------------------------------------------------------------------

         Key: COCOON-1825
         URL: http://issues.apache.org/jira/browse/COCOON-1825
     Project: Cocoon
        Type: Bug

  Components: Blocks: Forms  
    Versions: 2.1.9    
    Reporter: vincent Demay


Some widget (field with selection-list and styling=radio, group, etc...)  can 
not be hidden (state=invisible)in ajax mode.

I declare some widgets without state attribute in the form definition, my form 
is in ajax mode, when I set the widget state to INVISIBLE, the ajax response 
can not be applied to the form because <span id="widget-name">...</span> is not 
available in source code.

I think about 2 patches : 
*putting a <span></span> in forms-field-styling.xsl where is not set
*or modifing abstractWidgetDefinition.java in ordre to generate a placeholder 
around each widget (but patch seems to need a lot of modification in 
forms-field-styling.xsl too)



Here is the patch for first 

--- forms-field-styling.orig    2006-04-13 15:37:06.590221200 +0200
+++ forms-field-styling.xsl     2006-04-13 15:38:22.525291200 +0200
@@ -198,8 +198,9 @@
     <xsl:variable name="value" select="fi:value"/>
     <xsl:variable name="vertical" select="string(fi:styling/@list-orientation) 
!= 'horizontal'"/>
     <xsl:choose>
-      <xsl:when test="$vertical">
-        <table id="{$id}" cellpadding="0" cellspacing="0" border="0" 
title="{fi:hint}">
+      <xsl:when test="$vertical">      
+         <span id="{$id}">
+          <table id="{$id}" cellpadding="0" cellspacing="0" border="0" 
title="{fi:hint}">
           <xsl:for-each select="fi:selection-list/fi:item">
             <xsl:variable name="item-id" select="concat($id, ':', 
position())"/>
             <tr>
@@ -224,6 +225,7 @@
             </tr>
           </xsl:for-each>
         </table>
+        </span>
       </xsl:when>
       <xsl:otherwise>
         <span id="{$id}" title="{fi:hint}">
@@ -682,22 +684,24 @@
       | know where to insert the widget if it becomes visible
       +-->
   <xsl:template match="fi:placeholder">
-    <span id="[EMAIL PROTECTED]"/>
+    <span id="[EMAIL PROTECTED]"><xsl:apply-templates/></span>
   </xsl:template>
   
   <!--+
       | fi:struct - has no visual representation by default
       +-->
   <xsl:template match="fi:struct">
-    <xsl:apply-templates/>
+     <span id="[EMAIL PROTECTED]"><xsl:apply-templates/></span>
   </xsl:template>
 
   <!--+
       | fi:group - has no visual representation by default
       +-->
   <xsl:template match="fi:group">
-    <xsl:apply-templates/>
+    <span id="[EMAIL PROTECTED]"><xsl:apply-templates/></span>
   </xsl:template>
+  
+  
 
   <xsl:template match="@*|node()" priority="-1">
     <xsl:copy>




Here for the second


--- AbstractWidget.orig 2006-04-13 15:31:07.851701200 +0200
+++ AbstractWidget.java 2006-04-13 15:30:31.446616200 +0200
@@ -483,6 +483,10 @@
     public void generateSaxFragment(ContentHandler contentHandler, Locale 
locale)
     throws SAXException {
 
+       AttributesImpl placeHolderAttrs = new AttributesImpl();
+       placeHolderAttrs.addCDATAAttribute("id", getRequestParameterName());
+        contentHandler.startElement(FormsConstants.INSTANCE_NS, "placeholder", 
FormsConstants.INSTANCE_PREFIX_COLON + "placeholder", placeHolderAttrs);
+        
         if (getCombinedState().isDisplayingValues()) {
             // FIXME: we may want to strip out completely widgets that aren't 
updated when in AJAX mode
             String element = this.getXMLElementName();
@@ -497,15 +501,9 @@
 
             generateItemSaxFragment(contentHandler, locale);
 
-            contentHandler.endElement(FormsConstants.INSTANCE_NS, element, 
FormsConstants.INSTANCE_PREFIX_COLON + element);
-
-        } else {
-            // Generate a placeholder that can be used later by AJAX updates
-            AttributesImpl attrs = new AttributesImpl();
-            attrs.addCDATAAttribute("id", getRequestParameterName());
-            contentHandler.startElement(FormsConstants.INSTANCE_NS, 
"placeholder", FormsConstants.INSTANCE_PREFIX_COLON + "placeholder", attrs);
-            contentHandler.endElement(FormsConstants.INSTANCE_NS, 
"placeholder", FormsConstants.INSTANCE_PREFIX_COLON + "placeholder");
+            contentHandler.endElement(FormsConstants.INSTANCE_NS, element, 
FormsConstants.INSTANCE_PREFIX_COLON + element);         
         }
+        contentHandler.endElement(FormsConstants.INSTANCE_NS, "placeholder", 
FormsConstants.INSTANCE_PREFIX_COLON + "placeholder");
     }
 
        public Object getAttribute(String name) {


-- 
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

Reply via email to