Author: hlship
Date: Tue Jun 7 01:22:37 2011
New Revision: 1132847
URL: http://svn.apache.org/viewvc?rev=1132847&view=rev
Log:
TAP5-1542: Support for skinning/theming Tapestry pages
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/ComponentResourcesCommon.java
Tue Jun 7 01:22:37 2011
@@ -1,10 +1,10 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 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.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -15,15 +15,17 @@
package org.apache.tapestry5;
import org.apache.tapestry5.ioc.Locatable;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
import org.slf4j.Logger;
import java.util.Locale;
/**
- * Operations shared by the public {@link
org.apache.tapestry5.ComponentResources} interface and {@link
- * org.apache.tapestry5.internal.structure.ComponentPageElement} interface (on
the internal side).
+ * Operations shared by the public {@link
org.apache.tapestry5.ComponentResources} interface and
+ * {@link org.apache.tapestry5.internal.structure.ComponentPageElement}
interface (on the internal side).
*/
-@SuppressWarnings({ "JavaDoc" })
+@SuppressWarnings(
+{ "JavaDoc" })
public interface ComponentResourcesCommon extends Locatable
{
/**
@@ -38,13 +40,12 @@ public interface ComponentResourcesCommo
*/
String getNestedId();
-
/**
* Returns a string consisting of the logical name of the containing page,
and the {@link #getNestedId() nested id}
* of this component, separated by a colon. I.e., "MyPage:foo.bar.baz".
For a page, returns just the page's name.
* <p/>
* This value is often used to obtain an equivalent component instance in
a later request.
- *
+ *
* @see org.apache.tapestry5.services.ComponentSource#getComponent(String)
*/
String getCompleteId();
@@ -52,16 +53,19 @@ public interface ComponentResourcesCommo
/**
* A convienience for invoking {@link #triggerContextEvent(String,
EventContext , ComponentEventCallback)}. Wraps
* the context values into an {@link org.apache.tapestry5.EventContext}.
- *
- * @param eventType event type (as determined from the request, or
otherwise by design)
- * @param contextValues Values that may be provided to the event handler
method as method parameters, or null if no
- * context values are available
- * @param callback the handler to be informed of the result, or null
if the event is a notification that does
- * not support return values from event handler
methods (the value true is allowed even if the
- * handler is null).
+ *
+ * @param eventType
+ * event type (as determined from the request, or otherwise by
design)
+ * @param contextValues
+ * Values that may be provided to the event handler method as
method parameters, or null if no
+ * context values are available
+ * @param callback
+ * the handler to be informed of the result, or null if the
event is a notification that does
+ * not support return values from event handler methods (the
value true is allowed even if the
+ * handler is null).
* @return true if any event handler was invoked (even if no event handler
method returns a non-null value)
* @throws org.apache.tapestry5.runtime.ComponentEventException
- * if an event handler method throws a checked or unchecked
exception
+ * if an event handler method throws a checked or unchecked
exception
* @see org.apache.tapestry5.internal.transform.OnEventWorker
* @see org.apache.tapestry5.annotations.OnEvent
*/
@@ -74,16 +78,19 @@ public interface ComponentResourcesCommo
* non-null value).
* <p/>
* Resolution of event type to event handler methods is case insensitive.
- *
- * @param eventType event type (as determined from the request, or
otherwise by design)
- * @param context the context (as extracted from the request, or
provided by the triggering component); these
- * values may be provided to event handler methods via
their parameters (may not be null)
- * @param callback the handler to be informed of the result, or null if
the event is a notification that does not
- * support return values from event handler methods (the
value true is allowed even if the handler
- * is null).
+ *
+ * @param eventType
+ * event type (as determined from the request, or otherwise by
design)
+ * @param context
+ * the context (as extracted from the request, or provided by
the triggering component); these
+ * values may be provided to event handler methods via their
parameters (may not be null)
+ * @param callback
+ * the handler to be informed of the result, or null if the
event is a notification that does not
+ * support return values from event handler methods (the value
true is allowed even if the handler
+ * is null).
* @return true if any event handler was invoked (even if no event handler
method returns a non-null value)
* @throws org.apache.tapestry5.runtime.ComponentEventException
- * if an event handler method throws a checked or unchecked
exception
+ * if an event handler method throws a checked or unchecked
exception
* @see org.apache.tapestry5.internal.transform.OnEventWorker
* @see org.apache.tapestry5.annotations.OnEvent
*/
@@ -97,39 +104,52 @@ public interface ComponentResourcesCommo
/**
* Returns the log instance associated with the component (which is based
on the component or mixin's class name).
- *
+ *
* @see org.apache.tapestry5.model.ComponentModel#getLogger()
*/
Logger getLogger();
/**
* Returns the locale for the page containing this component.
+ *
+ * @see #getResourceSelector()
*/
Locale getLocale();
/**
+ * Returns the selector used when constructing the component and its
containing page.
+ *
+ * @since 5.3.0
+ */
+ ComponentResourceSelector getResourceSelector();
+
+ /**
* Returns the name of element that represents the component in its
template, or the provided default element name
* if the element was a component type (in the Tapestry namespace).
- *
- * @param defaultElementName element name to return if the element name is
not known (may be null)
+ *
+ * @param defaultElementName
+ * element name to return if the element name is not known (may
be null)
* @return the element name
*/
String getElementName(String defaultElementName);
/**
* Returns a block from the component's template, referenced by its id.
- *
- * @param blockId the id of the block (case insensitive)
+ *
+ * @param blockId
+ * the id of the block (case insensitive)
* @return the identified Block
- * @throws BlockNotFoundException if no block with the given id exists
+ * @throws BlockNotFoundException
+ * if no block with the given id exists
* @see #findBlock(String)
*/
Block getBlock(String blockId);
/**
* As with {@link #getBlock(String)}, but returns null if the block is not
found.
- *
- * @param blockId the id of the block (case insensitive)
+ *
+ * @param blockId
+ * the id of the block (case insensitive)
* @return the block, or null
*/
Block findBlock(String blockId);
@@ -137,50 +157,56 @@ public interface ComponentResourcesCommo
/**
* Returns the <em>logical</em> name of the page containing this
component. This is the short name (it often appears
* in URLs)
- *
+ *
* @return the logical name of the page which contains this component
*/
String getPageName();
-
/**
- * Returns true if the element has a body and false otherwise. Only
components may have a body; pages and mixins
+ * Returns true if the element has a body and false otherwise. Only
components may have a body; pages and mixins
* will return false.
*/
boolean hasBody();
/**
- * Returns the body of this component as a (possibly empty) block. When
invoked on a mixin, returns the containing
+ * Returns the body of this component as a (possibly empty) block. When
invoked on a mixin, returns the containing
* component's body.
*/
Block getBody();
/**
* Creates a component event request link as a callback for this
component. The event type and context (as well as
- * the page name and nested component id) will be encoded into a URL. A
request for the URL will {@linkplain
- * #triggerEvent(String, Object[],
org.apache.tapestry5.ComponentEventCallback)} trigger} the named event on the
+ * the page name and nested component id) will be encoded into a URL. A
request for the URL will
+ * {@linkplain #triggerEvent(String, Object[],
org.apache.tapestry5.ComponentEventCallback)} trigger} the named
+ * event on the
* component.
- *
- * @param eventType the type of event to be triggered. Event types should
be Java identifiers (contain only
- * letters, numbers and the underscore).
- * @param context additional objects to be encoded into the path portion
of the link; each is converted to a
- * string and URI encoded
+ *
+ * @param eventType
+ * the type of event to be triggered. Event types should be
Java identifiers (contain only
+ * letters, numbers and the underscore).
+ * @param context
+ * additional objects to be encoded into the path portion of
the link; each is converted to a
+ * string and URI encoded
* @return link object for the callback
*/
Link createEventLink(String eventType, Object... context);
/**
* Creates a component event request link as a callback for this
component. The event type and context (as well as
- * the page name and nested component id) will be encoded into a URL. A
request for the URL will {@linkplain
- * #triggerEvent(String, Object[],
org.apache.tapestry5.ComponentEventCallback)} trigger} the named event on the
+ * the page name and nested component id) will be encoded into a URL. A
request for the URL will
+ * {@linkplain #triggerEvent(String, Object[],
org.apache.tapestry5.ComponentEventCallback)} trigger} the named
+ * event on the
* component.
- *
- * @param eventType the type of event to be triggered. Event types should
be Java identifiers (contain only
- * letters, numbers and the underscore).
- * @param forForm if true, the link will be used as the eventType for an
HTML form submission, which may affect
- * what information is encoded into the link
- * @param context additional objects to be encoded into the path portion
of the link; each is converted to a
- * string and URI encoded
+ *
+ * @param eventType
+ * the type of event to be triggered. Event types should be
Java identifiers (contain only
+ * letters, numbers and the underscore).
+ * @param forForm
+ * if true, the link will be used as the eventType for an HTML
form submission, which may affect
+ * what information is encoded into the link
+ * @param context
+ * additional objects to be encoded into the path portion of
the link; each is converted to a
+ * string and URI encoded
* @return link object for the callback
* @deprecated Use {@link #createEventLink(String, Object[])} instead
*/
@@ -188,30 +214,36 @@ public interface ComponentResourcesCommo
/**
* Creates a component event request link as a callback for this
component. The event type and context (as well as
- * the page name and nested component id) will be encoded into a URL. A
request for the URL will {@linkplain
- * #triggerEvent(String, Object[],
org.apache.tapestry5.ComponentEventCallback)} trigger} the named event on the
+ * the page name and nested component id) will be encoded into a URL. A
request for the URL will
+ * {@linkplain #triggerEvent(String, Object[],
org.apache.tapestry5.ComponentEventCallback)} trigger} the named
+ * event on the
* component. This is only used for form submission events, as extra data
may be encoded in the form as hidden
* fields.
- *
- * @param eventType the type of event to be triggered. Event types should
be Java identifiers (contain only
- * letters, numbers and the underscore).
- * @param context additional objects to be encoded into the path portion
of the link; each is converted to a
- * string and URI encoded
+ *
+ * @param eventType
+ * the type of event to be triggered. Event types should be
Java identifiers (contain only
+ * letters, numbers and the underscore).
+ * @param context
+ * additional objects to be encoded into the path portion of
the link; each is converted to a
+ * string and URI encoded
* @return link object for the callback
*/
Link createFormEventLink(String eventType, Object... context);
/**
* Creates a page render request link to render a specific page.
- *
- * @param pageName the logical name of the page to link to
- * @param override if true, the context is used even if empty (normally,
the target page is allowed to passivate,
- * providing a context, when the provided context is empty)
- * @param context the activation context for the page. If omitted, the
activation context is obtained from the
- * target page
+ *
+ * @param pageName
+ * the logical name of the page to link to
+ * @param override
+ * if true, the context is used even if empty (normally, the
target page is allowed to passivate,
+ * providing a context, when the provided context is empty)
+ * @param context
+ * the activation context for the page. If omitted, the
activation context is obtained from the
+ * target page
* @return link for a render request to the targetted page
- * @deprecated Use {@link
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLink(String)}
or {@link
- *
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLinkWithContext(String,
Object[])}
+ * @deprecated Use {@link
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLink(String)}
or
+ * {@link
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLinkWithContext(String,
Object[])}
* instead
*/
Link createPageLink(String pageName, boolean override, Object... context);
@@ -219,15 +251,18 @@ public interface ComponentResourcesCommo
/**
* Creates a page render request link to render a specific page. Using a
page class, rather than a page name, is
* more refactoring safe (in the even the page is renamed or moved).
- *
- * @param pageClass identifies the page to link to
- * @param override if true, the context is used even if empty (normally,
the target page is allowed to passivate,
- * providing a context, when the provided context is
empty)
- * @param context the activation context for the page. If omitted, the
activation context is obtained from the
- * target page
+ *
+ * @param pageClass
+ * identifies the page to link to
+ * @param override
+ * if true, the context is used even if empty (normally, the
target page is allowed to passivate,
+ * providing a context, when the provided context is empty)
+ * @param context
+ * the activation context for the page. If omitted, the
activation context is obtained from the
+ * target page
* @return link for a render request to the targetted page
- * @deprecated Use {@link
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLink(Class)}
or {@link
- *
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLinkWithContext(Class,
Object[])}
+ * @deprecated Use {@link
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLink(Class)}
or
+ * {@link
org.apache.tapestry5.services.PageRenderLinkSource#createPageRenderLinkWithContext(Class,
Object[])}
* instead
*/
Link createPageLink(Class pageClass, boolean override, Object... context);
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
Tue Jun 7 01:22:37 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 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.
@@ -25,6 +25,7 @@ import org.apache.tapestry5.model.Mutabl
import org.apache.tapestry5.services.ClassTransformation;
import org.apache.tapestry5.services.ComponentValueProvider;
import org.apache.tapestry5.services.InjectionProvider;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
import org.slf4j.Logger;
/**
@@ -32,6 +33,14 @@ import org.slf4j.Logger;
*/
public class CommonResourcesInjectionProvider implements InjectionProvider
{
+ private static ComponentValueProvider<ComponentResourceSelector>
selectorProvider = new ComponentValueProvider<ComponentResourceSelector>()
+ {
+ public ComponentResourceSelector get(ComponentResources resources)
+ {
+ return resources.getResourceSelector();
+ }
+ };
+
private static ComponentValueProvider<Messages> messagesProvider = new
ComponentValueProvider<Messages>()
{
@@ -67,10 +76,10 @@ public class CommonResourcesInjectionPro
}
};
- private static final Map<Class, ComponentValueProvider> configuration =
CollectionFactory
- .newMap();
+ private static final Map<Class, ComponentValueProvider> configuration =
CollectionFactory.newMap();
{
+ configuration.put(ComponentResourceSelector.class, selectorProvider);
configuration.put(Messages.class, messagesProvider);
configuration.put(Locale.class, localeProvider);
configuration.put(Logger.class, loggerProvider);
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElement.java
Tue Jun 7 01:22:37 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 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.
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
Tue Jun 7 01:22:37 2011
@@ -68,6 +68,7 @@ import org.apache.tapestry5.runtime.Page
import org.apache.tapestry5.runtime.RenderCommand;
import org.apache.tapestry5.runtime.RenderQueue;
import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
import org.slf4j.Logger;
/**
@@ -1350,4 +1351,9 @@ public class ComponentPageElementImpl ex
{
return !productionMode && (componentTracingEnabled ||
"true".equals(request.getParameter("t:component-trace")));
}
+
+ public ComponentResourceSelector getResourceSelector()
+ {
+ return page.getSelector();
+ }
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
Tue Jun 7 01:22:37 2011
@@ -44,6 +44,7 @@ import org.apache.tapestry5.model.Compon
import org.apache.tapestry5.runtime.Component;
import org.apache.tapestry5.runtime.PageLifecycleListener;
import org.apache.tapestry5.runtime.RenderQueue;
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
import org.slf4j.Logger;
/**
@@ -400,6 +401,11 @@ public class InternalComponentResourcesI
return element.getLocale();
}
+ public ComponentResourceSelector getResourceSelector()
+ {
+ return element.getResourceSelector();
+ }
+
public synchronized Messages getMessages()
{
if (messages == null)
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/SkinningTests.groovy
Tue Jun 7 01:22:37 2011
@@ -60,4 +60,16 @@ class SkinningTests extends TapestryCore
assertText "page-over", "Overridden page catalog message (Barney)"
}
+
+ @Test
+ void injection_of_selector()
+ {
+ openLinks "reset session", "English"
+
+ assertText "selector", "ComponentResourcesSelector[en]"
+
+ clickAndWait "link=French"
+
+ assertText "selector", "ComponentResourcesSelector[fr]"
+ }
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app5/pages/Index.groovy
Tue Jun 7 01:22:37 2011
@@ -14,11 +14,13 @@
package org.apache.tapestry5.integration.app5.pages
+import org.apache.tapestry5.annotations.Property
import org.apache.tapestry5.annotations.SessionState
import org.apache.tapestry5.integration.app5.Client
import org.apache.tapestry5.integration.app5.ClientTracker
import org.apache.tapestry5.ioc.annotations.Inject
import org.apache.tapestry5.services.PersistentLocale
+import org.apache.tapestry5.services.pageload.ComponentResourceSelector
class Index {
@@ -27,6 +29,10 @@ class Index {
@SessionState
private ClientTracker tracker
+
+ @Property
+ @Inject
+ private ComponentResourceSelector selector
void onActionFromFred() {
tracker.client = Client.FRED
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml?rev=1132847&r1=1132846&r2=1132847&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app5/pages/Index.tml
Tue Jun 7 01:22:37 2011
@@ -11,6 +11,8 @@
<dd id="page-over">${message:page-perclient-message}</dd>
<dt>hello</dt>
<dd id="hello">${message:hello}</dd>
+ <dt>selector</dt>
+ <dd id="selector">${selector}</dd>
</dl>