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