You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2008/03/02 22:54:30 UTC
svn commit: r632855 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry/internal/services/
main/java/org/apache/tapestry/services/
main/resources/org/apache/tapestry/internal/services/ test/app1/
test/java/org/apache/tapestr...
Author: hlship
Date: Sun Mar 2 13:54:29 2008
New Revision: 632855
URL: http://svn.apache.org/viewvc?rev=632855&view=rev
Log:
TAPESTRY-2221: Exception message when a context value is null or blank is confusing
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageLinkContext.tml
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/PageLinkContext.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java?rev=632855&r1=632854&r2=632855&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java Sun Mar 2 13:54:29 2008
@@ -24,6 +24,7 @@
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.*;
import static org.apache.tapestry.ioc.internal.util.Defense.notBlank;
import static org.apache.tapestry.ioc.internal.util.Defense.notNull;
+import org.apache.tapestry.ioc.internal.util.InternalUtils;
import org.apache.tapestry.ioc.util.StrategyRegistry;
import org.apache.tapestry.services.ContextValueEncoder;
import org.apache.tapestry.services.Request;
@@ -252,8 +253,17 @@
String[] result = new String[context.length];
- for (int i = 0; i < context.length; i++)
- result[i] = _contextValueEncoder.toClient(context[i]);
+ for (int i = 0; i < context.length; i++) {
+
+ Object value = context[i];
+
+ String encoded = value == null ? null : _contextValueEncoder.toClient(value);
+
+ if (InternalUtils.isBlank(encoded))
+ throw new RuntimeException(ServicesMessages.contextValueMayNotBeNull());
+
+ result[i]= encoded;
+ }
return result;
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java?rev=632855&r1=632854&r2=632855&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java Sun Mar 2 13:54:29 2008
@@ -405,4 +405,9 @@
{
return MESSAGES.format("no-such-method", ClassFabUtils.toJavaClassName(clazz), methodName);
}
+
+ static String contextValueMayNotBeNull()
+ {
+ return MESSAGES.get("context-value-may-not-be-null");
+ }
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java?rev=632855&r1=632854&r2=632855&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java Sun Mar 2 13:54:29 2008
@@ -1181,10 +1181,10 @@
/**
* The MasterDispatcher is a chain-of-command of individual Dispatchers, each handling (like a servlet) a particular
* kind of incoming request. <dl> <dt>RootPath</dt> <dd>Renders the start page for the "/" request</dd>
- * <dt>Asset</dt> <dd>Provides access to classpath assets</dd> <dt>PageRender</dt> <dd>Identifies the page name and
- * activation context and forwards onto {@link PageRenderRequestHandler}</dd> <dt>ComponentEvent</dt> <dd>Identifies
- * the {@link ComponentEventRequestParameters} and forwards onto the {@link ComponentEventRequestHandler}</dd>
- * </dl>
+ * <dt>Asset</dt> <dd>Provides access to classpath assets</dd> <dt>PageRender</dt> <dd>Identifies the {@link
+ * org.apache.tapestry.services.PageRenderRequestParameters} and forwards onto {@link PageRenderRequestHandler}</dd>
+ * <dt>ComponentEvent</dt> <dd>Identifies the {@link ComponentEventRequestParameters} and forwards onto the {@link
+ * ComponentEventRequestHandler}</dd> </dl>
*/
public void contributeMasterDispatcher(OrderedConfiguration<Dispatcher> configuration,
@@ -1205,7 +1205,8 @@
@Symbol("tapestry.start-page-name")
String startPageName)
{
- // Looks for the root path and renders the start page
+ // Looks for the root path and renders the start page. This is maintained for compatibility
+ // with earlier versions of Tapestry 5, it is recommended that an Index page be used instead.
configuration.add("RootPath",
new RootPathDispatcher(componentClassResolver, pageRenderRequestHandler, startPageName),
@@ -1214,15 +1215,16 @@
// This goes first because an asset to be streamed may have an file extension, such as
// ".html", that will confuse the later dispatchers.
- configuration.add("Asset", new AssetDispatcher(streamer, aliasManager, resourceCache), "before:PageRender");
+ configuration.add("Asset", new AssetDispatcher(streamer, aliasManager, resourceCache), "before:ComponentEvent");
- configuration.add("PageRender", new PageRenderDispatcher(componentClassResolver, pageRenderRequestHandler,
- contextValueEncoder));
configuration.add("ComponentEvent",
new ComponentEventDispatcher(componentEventRequestHandler, componentClassResolver,
contextValueEncoder),
"before:PageRender");
+
+ configuration.add("PageRender", new PageRenderDispatcher(componentClassResolver, pageRenderRequestHandler,
+ contextValueEncoder));
}
/**
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties?rev=632855&r1=632854&r2=632855&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties Sun Mar 2 13:54:29 2008
@@ -92,3 +92,4 @@
no-translator-for-type=No translator is defined for type %s. Registered types: %s.
parameter-binding-must-not-be-empty=Parameter '%s' must have a non-empty binding.
no-such-method=Class %s does not contain a method named '%s()'.
+context-value-may-not-be-null=Context values (which are added to the request URL) may not be null or blank.
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageLinkContext.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageLinkContext.tml?rev=632855&r1=632854&r2=632855&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageLinkContext.tml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageLinkContext.tml Sun Mar 2 13:54:29 2008
@@ -17,6 +17,8 @@
<a t:type="pagelink" page="target" context="unsafeCharacters">unsafe characters</a>
<br/>
<a t:type="pagelink" page="target" context="japaneseKanji">japanese kanji</a>
+ <br/>
+ <t:actionlink t:id="nullContext">Null in ontext</t:actionlink>
</html>
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?rev=632855&r1=632854&r2=632855&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java Sun Mar 2 13:54:29 2008
@@ -772,6 +772,14 @@
clickAndWait("link=japanese kanji");
assertText("//li[1]", "japanese kanji: \u65E5\u672C\u8A9E");
+
+ // TAPESTRY-2221
+
+ clickAndWait("link=PageLink Context Demo");
+
+ clickAndWait("link=Null in context");
+
+ assertTextPresent("Context values (which are added to the request URL) may not be null or blank.");
}
@Test
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/PageLinkContext.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/PageLinkContext.java?rev=632855&r1=632854&r2=632855&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/PageLinkContext.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/PageLinkContext.java Sun Mar 2 13:54:29 2008
@@ -14,11 +14,17 @@
package org.apache.tapestry.integration.app1.pages;
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.ioc.annotations.Inject;
+
public class PageLinkContext
{
+ @Inject
+ private ComponentResources _resources;
+
public Object[] getComputedContext()
{
- return new Object[]{"fred", 7, true};
+ return new Object[] { "fred", 7, true };
}
public String getUnsafeCharacters()
@@ -30,4 +36,10 @@
{
return "japanese kanji: \u65E5\u672C\u8A9E";
}
+
+ Object onActionFromNullContext()
+ {
+ return _resources.createPageLink("target", true, new Object[] { null });
+ }
+
}