Author: hlship
Date: Wed Aug 18 01:06:37 2010
New Revision: 986543
URL: http://svn.apache.org/viewvc?rev=986543&view=rev
Log:
TAP5-1235: The interaction between a Form component and the active page can be
problematic when there is an error loading a page
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java?rev=986543&r1=986542&r2=986543&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
Wed Aug 18 01:06:37 2010
@@ -378,8 +378,8 @@ public class Form implements ClientEleme
if (autofocus)
{
- ValidationDecorator autofocusDecorator = new
AutofocusValidationDecorator(environment
- .peek(ValidationDecorator.class), activeTracker,
renderSupport);
+ ValidationDecorator autofocusDecorator = new
AutofocusValidationDecorator(
+ environment.peek(ValidationDecorator.class),
activeTracker, renderSupport);
environment.push(ValidationDecorator.class, autofocusDecorator);
}
@@ -712,9 +712,27 @@ public class Form implements ClientEleme
idAllocator.allocateId(name);
}
- ComponentResources activePageResources =
componentSource.getActivePage().getComponentResources();
+ Component activePage = componentSource.getActivePage();
-
activePageResources.triggerEvent(EventConstants.PREALLOCATE_FORM_CONTROL_NAMES,
new Object[]
- { idAllocator }, null);
+ // This is unlikely but may be possible if people override some of the
standard
+ // exception reporting logic.
+
+ if (activePage == null)
+ return;
+
+ ComponentResources activePageResources =
activePage.getComponentResources();
+
+ try
+ {
+
+
activePageResources.triggerEvent(EventConstants.PREALLOCATE_FORM_CONTROL_NAMES,
new Object[]
+ { idAllocator }, null);
+ }
+ catch (RuntimeException ex)
+ {
+ logger.error(
+ String.format("Unable to obtrain form control names to
preallocate: %s",
+ InternalUtils.toMessage(ex)), ex);
+ }
}
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java?rev=986543&r1=986542&r2=986543&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentSourceImpl.java
Wed Aug 18 01:06:37 2010
@@ -98,10 +98,7 @@ public class ComponentSourceImpl impleme
{
String pageName = globals.getActivePageName();
- if (pageName == null)
- throw new RuntimeException("The identity of the active page for
this request has not yet been established.");
-
- return getPage(pageName);
+ return pageName == null ? null : getPage(pageName);
}
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java?rev=986543&r1=986542&r2=986543&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentSource.java
Wed Aug 18 01:06:37 2010
@@ -66,9 +66,7 @@ public interface ComponentSource
* the request.
* The identity of the active page is not known until the correct
{...@link Dispatcher} determines this.
*
- * @return the active page
- * @throws RuntimeException
- * if the active page is not yet known
+ * @return the active page, or null if no active page is yet identified
* @since 5.2.0
*/
Component getActivePage();
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java?rev=986543&r1=986542&r2=986543&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentSourceImplTest.java
Wed Aug 18 01:06:37 2010
@@ -151,15 +151,7 @@ public class ComponentSourceImplTest ext
ComponentSource source = new ComponentSourceImpl(null, null, globals);
- try
- {
- source.getActivePage();
- unreachable();
- }
- catch (RuntimeException ex)
- {
- assertMessageContains(ex, "active page", "not yet been
established");
- }
+ assertNull(source.getActivePage());
verify();