Author: hlship
Date: Wed Feb 7 10:56:37 2007
New Revision: 504647
URL: http://svn.apache.org/viewvc?view=rev&rev=504647
Log:
Correctly access the root component of a page when the nested id is the empty
string; avoids an error for URLs that consist of the page name and an event
type as the extension.
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java?view=diff&rev=504647&r1=504646&r2=504647
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
Wed Feb 7 10:56:37 2007
@@ -57,12 +57,14 @@
// TODO: Not too happy about needing this cast; can the method be
moved up to
// InvocationTarget or ComponentInvocation?
ActionLinkTarget actionLinkTarget = Defense.cast(target,
ActionLinkTarget.class, "target");
+
Page page = _cache.get(actionLinkTarget.getPageName());
// This is the active page, until we know better.
- ComponentPageElement element =
page.getComponentElementByNestedId(actionLinkTarget
- .getComponentNestedId());
+ String nestedId = actionLinkTarget.getComponentNestedId();
+
+ ComponentPageElement element =
page.getComponentElementByNestedId(nestedId);
final Holder<ActionResponseGenerator> holder = new
Holder<ActionResponseGenerator>();
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java?view=diff&rev=504647&r1=504646&r2=504647
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/Page.java
Wed Feb 7 10:56:37 2007
@@ -106,6 +106,7 @@
/**
* Retrieves a component element by its nested id (a sequence of simple
ids, separated by dots).
+ * A nested id of '' (the empty string) returns the root element of the
page.
*
* @throws IllegalArgumentException
* if the nestedId does not correspond to a component
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java?view=diff&rev=504647&r1=504646&r2=504647
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
Wed Feb 7 10:56:37 2007
@@ -15,6 +15,7 @@
package org.apache.tapestry.internal.structure;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
+import static org.apache.tapestry.ioc.internal.util.Defense.notNull;
import java.util.List;
import java.util.Locale;
@@ -23,6 +24,7 @@
import org.apache.tapestry.ComponentResources;
import org.apache.tapestry.Link;
import org.apache.tapestry.internal.services.LinkFactory;
+import org.apache.tapestry.ioc.internal.util.InternalUtils;
import org.apache.tapestry.runtime.Component;
import org.apache.tapestry.runtime.PageLifecycleListener;
import org.apache.tapestry.services.PersistentFieldBundle;
@@ -67,14 +69,19 @@
public ComponentPageElement getComponentElementByNestedId(String nestedId)
{
+ notNull(nestedId, "nestedId");
+
// TODO: Especially with the addition of all the caseless logic, and
with respect to how
// forms are implemented, it may be worthwhile to cache the key to
element mapping. I think
// we're going to do it a lot!
ComponentPageElement element = _rootElement;
- for (String id : nestedId.split("\\."))
- element = element.getEmbeddedElement(id);
+ if (InternalUtils.isNonBlank(nestedId))
+ {
+ for (String id : nestedId.split("\\."))
+ element = element.getEmbeddedElement(id);
+ }
return element;
}
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java?view=diff&rev=504647&r1=504646&r2=504647
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/PageImplTest.java
Wed Feb 7 10:56:37 2007
@@ -33,7 +33,7 @@
@Test
public void accessor_methods()
{
- ComponentPageElement root = newMock(ComponentPageElement.class);
+ ComponentPageElement root = newComponentPageElement();
replay();
@@ -176,6 +176,22 @@
page.addLifecycleListener(listener2);
page.loaded();
+
+ verify();
+ }
+
+ @Test
+ public void get_by_nested_id_for_blank_value_returns_root_component()
+ {
+ ComponentPageElement root = newComponentPageElement();
+
+ replay();
+
+ Page page = new PageImpl(PAGE_NAME, _locale, null, null);
+
+ page.setRootElement(root);
+
+ assertSame(page.getComponentElementByNestedId(""), root);
verify();
}