Author: jkuhnert
Date: Tue May 1 06:48:46 2007
New Revision: 534087
URL: http://svn.apache.org/viewvc?view=rev&rev=534087
Log:
There was a bug in the event connection visitor where it wouldn't take into
account that multiple pages may be loaded in a single threaded service run and
so incorrectly thought all forms had been found for a particular page when they
were actually just the last pages forms.
Also fixed bug where RenderBody wasn't able to correctly be iterated over for
containing components because of the special relationship between it and
BaseComponent.
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/BaseComponent.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/Component.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java?view=diff&rev=534087&r1=534086&r2=534087
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
Tue May 1 06:48:46 2007
@@ -94,13 +94,13 @@
* The number of [EMAIL PROTECTED] IRender}objects in the body of this
component.
*/
- private int _bodyCount = 0;
+ protected int _bodyCount = 0;
/**
* An aray of elements in the body of this component.
*/
- private IRender[] _body;
+ protected IRender[] _body;
/**
* The components' asset map.
@@ -210,18 +210,18 @@
_body[_bodyCount++] = element;
}
+
- /**
- * Returns the list of of [EMAIL PROTECTED] IRender} elements contained by
this component. Ie whatever
- * has been added via [EMAIL PROTECTED] #addBody(IRender)}.
- *
- * @return The values, if any. Null otherwise.
- */
public IRender[] getContainedRenderers()
{
return _body;
}
-
+
+ public IRender[] getInnerRenderers()
+ {
+ return null;
+ }
+
/**
* Invokes [EMAIL PROTECTED] #finishLoad()}. Subclasses may overide as
needed, but must invoke this
* implementation. [EMAIL PROTECTED] BaseComponent} loads its HTML
template.
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/BaseComponent.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/BaseComponent.java?view=diff&rev=534087&r1=534086&r2=534087
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/BaseComponent.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/BaseComponent.java
Tue May 1 06:48:46 2007
@@ -72,9 +72,19 @@
{
return _outer;
}
+
+ public IRender[] getInnerRenderers()
+ {
+ return _body;
+ }
/**
* Reads the receiver's template and figures out which elements wrap which
other elements.
+ *
+ * @param cycle
+ * The current request.
+ * @param loader
+ * The service responsible for loading / resolving a page spec.
*/
private void readTemplate(IRequestCycle cycle, IPageLoader loader)
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.java?view=diff&rev=534087&r1=534086&r2=534087
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.java
Tue May 1 06:48:46 2007
@@ -14,10 +14,8 @@
package org.apache.tapestry.components;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.*;
+import org.apache.tapestry.internal.Component;
/**
* Renders the text and components wrapped by a component. [<a
@@ -39,5 +37,12 @@
IComponent container = getContainer();
container.renderBody(writer, cycle);
+ }
+
+ public IRender[] getContainedRenderers()
+ {
+ Component container = (Component) getContainer();
+
+ return container.getInnerRenderers();
}
}
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/Component.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/Component.java?view=diff&rev=534087&r1=534086&r2=534087
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/Component.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/Component.java
Tue May 1 06:48:46 2007
@@ -20,5 +20,12 @@
*/
IRender[] getContainedRenderers();
-
+ /**
+ * In some rare cases a component has both outer and inner renderers -
such as with [EMAIL PROTECTED] org.apache.tapestry.BaseComponent}. This
+ * value should return the normal inner renderers most components do in
those instances while the other
+ * [EMAIL PROTECTED] #getContainedRenderers()} should return the outer
renderers.
+ *
+ * @return The inner renderers if this component supports more than one
type, null otherwise.
+ */
+ IRender[] getInnerRenderers();
}
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java?view=diff&rev=534087&r1=534086&r2=534087
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java
Tue May 1 06:48:46 2007
@@ -4,6 +4,7 @@
import org.apache.hivemind.PoolManageable;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.IForm;
+import org.apache.tapestry.IPage;
import org.apache.tapestry.IRender;
import org.apache.tapestry.form.IFormComponent;
import org.apache.tapestry.internal.Component;
@@ -24,6 +25,7 @@
IComponentEventInvoker _invoker;
+ IPage _currentPage = null;
List _forms = new ArrayList();
public void visitComponent(IComponent component)
@@ -31,6 +33,8 @@
if (component.getSpecification().getTargetsResolved())
return;
+ checkComponentPage(component);
+
Map events = component.getSpecification().getComponentEvents();
Iterator it = events.keySet().iterator();
@@ -223,12 +227,28 @@
return null;
}
+ void checkComponentPage(IComponent component)
+ {
+ if (_currentPage == null) {
+
+ _currentPage = component.getPage();
+ _forms.clear();
+ } else if (component.getPage() != _currentPage) {
+
+ _currentPage = component.getPage();
+ _forms.clear();
+ }
+ }
+
public void activateService()
{
+ _currentPage = null;
+ _forms.clear();
}
public void passivateService()
{
+ _currentPage = null;
_forms.clear();
}
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java?view=diff&rev=534087&r1=534086&r2=534087
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java
Tue May 1 06:48:46 2007
@@ -106,14 +106,12 @@
verify();
}
-
-
IComponent newComponent(IComponentSpecification spec, String findCompId,
Object... args)
{
IComponent comp = newComponent(spec);
IPage page = newMock(IPage.class);
- expect(comp.getPage()).andReturn(page);
+ expect(comp.getPage()).andReturn(page).anyTimes();
Map comps = new HashMap();
comps.put(findCompId, comp);