You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/10/18 00:31:36 UTC
svn commit: r1185406 - in
/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services:
ComponentEventLinkEncoderImpl.java RootPathDispatcher.java
Author: hlship
Date: Mon Oct 17 22:31:35 2011
New Revision: 1185406
URL: http://svn.apache.org/viewvc?rev=1185406&view=rev
Log:
TAP5-1701: If the incoming request does not include a locale in the path, the application uses the server locale (not a locale extracted from the request headers)
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java?rev=1185406&r1=1185405&r2=1185406&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java Mon Oct 17 22:31:35 2011
@@ -236,6 +236,8 @@ public class ComponentEventLinkEncoderIm
public ComponentEventRequestParameters decodeComponentEventRequest(Request request)
{
+ boolean explicitLocale = false;
+
Matcher matcher = COMPONENT_EVENT_REQUEST_PATH_PATTERN.matcher(request.getPath());
if (!matcher.matches())
@@ -257,6 +259,7 @@ public class ComponentEventLinkEncoderIm
if (localizationSetter.setLocaleFromLocaleName(possibleLocaleName))
{
activePageName = activePageName.substring(slashx + 1);
+ explicitLocale = true;
}
if (!componentClassResolver.isPageName(activePageName))
@@ -289,12 +292,28 @@ public class ComponentEventLinkEncoderIm
else
containingPageName = componentClassResolver.canonicalizePageName(containingPageName);
+ if (!explicitLocale)
+ {
+ setLocaleFromRequest(request);
+ }
+
return new ComponentEventRequestParameters(activePageName, containingPageName, nestedComponentId, eventType,
activationContext, eventContext);
}
+ private void setLocaleFromRequest(Request request)
+ {
+ Locale locale = request.getLocale();
+
+ // And explicit locale will have invoked setLocaleFromLocaleName().
+
+ localizationSetter.setNonPeristentLocaleFromLocaleName(locale.toString());
+ }
+
public PageRenderRequestParameters decodePageRenderRequest(Request request)
{
+ boolean explicitLocale = false;
+
// The extended name may include a page activation context. The trick is
// to figure out where the logical page name stops and where the
// activation context begins. Further, strip out the leading slash.
@@ -347,6 +366,7 @@ public class ComponentEventLinkEncoderIm
if (localizationSetter.setLocaleFromLocaleName(possibleLocaleName))
{
extendedName = slashx > 0 ? extendedName.substring(slashx + 1) : "";
+ explicitLocale = true;
}
slashx = extendedName.length();
@@ -372,7 +392,14 @@ public class ComponentEventLinkEncoderIm
// OK, maybe its all page activation context for the root Index page.
- return checkIfPage(request, "", extendedName);
+ PageRenderRequestParameters result = checkIfPage(request, "", extendedName);
+
+ if (result != null && !explicitLocale)
+ {
+ setLocaleFromRequest(request);
+ }
+
+ return result;
}
private PageRenderRequestParameters checkIfPage(Request request, String pageName, String pageActivationContext)
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java?rev=1185406&r1=1185405&r2=1185406&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RootPathDispatcher.java Mon Oct 17 22:31:35 2011
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008, 2010 The Apache Software Foundation
+// Copyright 2007, 2008, 2010, 2011 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -14,18 +14,13 @@
package org.apache.tapestry5.internal.services;
-import java.io.IOException;
-
import org.apache.tapestry5.EventContext;
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.internal.EmptyEventContext;
import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.services.ComponentClassResolver;
-import org.apache.tapestry5.services.ComponentRequestHandler;
-import org.apache.tapestry5.services.Dispatcher;
-import org.apache.tapestry5.services.PageRenderRequestParameters;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.services.*;
+
+import java.io.IOException;
/**
* Recognizes a request for the application root (i.e., "/") and handles this the same as a render request for the
@@ -43,16 +38,19 @@ public class RootPathDispatcher implemen
private final PageRenderRequestParameters parameters;
+ private final LocalizationSetter localizationSetter;
+
public RootPathDispatcher(ComponentClassResolver componentClassResolver,
- ComponentRequestHandler handler,
+ ComponentRequestHandler handler,
- @Symbol(SymbolConstants.START_PAGE_NAME)
- String startPageName)
+ @Symbol(SymbolConstants.START_PAGE_NAME)
+ String startPageName, LocalizationSetter localizationSetter)
{
this.componentClassResolver = componentClassResolver;
this.handler = handler;
this.startPageName = startPageName;
+ this.localizationSetter = localizationSetter;
parameters = new PageRenderRequestParameters(this.startPageName, EMPTY_CONTEXT, false);
}
@@ -63,6 +61,8 @@ public class RootPathDispatcher implemen
if (request.getPath().equals("/") && componentClassResolver.isPageName(startPageName))
{
+ localizationSetter.setNonPeristentLocaleFromLocaleName(request.getLocale().toString());
+
handler.handlePageRender(parameters);
return true;