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 2007/04/21 20:54:23 UTC
svn commit: r531082 - in /tapestry/tapestry5/tapestry-core/trunk/src:
main/java/org/apache/tapestry/annotations/
main/java/org/apache/tapestry/corelib/components/
main/java/org/apache/tapestry/internal/services/
main/java/org/apache/tapestry/runtime/ s...
Author: hlship
Date: Sat Apr 21 11:54:22 2007
New Revision: 531082
URL: http://svn.apache.org/viewvc?view=rev&rev=531082
Log:
TAPESTRY-1424: @OnEvent annotation should be simplified to specify at most one event and at most one component id
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/OnEvent.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentEvent.java
tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/base/BaseEventHandlerDemo.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/pages/EventHandlerTarget.java
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/OnEvent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/OnEvent.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/OnEvent.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/annotations/OnEvent.java Sat Apr 21 11:54:22 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -12,62 +12,58 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import org.apache.tapestry.TapestryConstants;
-
-/**
- * Marks a method as a handler for a client side event. The handler method will be invoked when a
- * component triggers an event. Filters on the type of event and on the originating component ensure
- * that only the appropriate methods are invoked.
- * <p>
- * Client events include a <em>context</em> of one or more values. These context values are
- * included in the action URI. The values are optionally supplied to the handler method as
- * parameters. Automatic type coercions from string to the type of the actual parameter occur.
- * <p>
- * Handlers may return a value. Returning a non-null value will abort the handling of the event, and
- * will usually control the response sent to the client web browser. The details are somewhat
- * specific to the type of event and the component involved.
- * <p>
- * If a handler is not found within the originating component (or no handler aborts the event
- * handling), then handlers within the containing component will be searched. This continues up the
- * page hierarchy. In some cases, having no handlers (or no aborting handlers) is considered
- * acceptible; in others, it is an error. Again, this is defined by the type of originating
- * component, and the type of event.
- * <p>
- * <strong>If you fail to provide filters on either component or event type, then your method will
- * be invoked for all component events, possibly including events that bubble up from embedded
- * sub-components. </strong>
- *
- *
- */
-@Target(ElementType.METHOD)
-@Retention(RUNTIME)
-@Documented
-public @interface OnEvent {
-
- /**
- * A list of event types to match. The handler will only be invoked if the client event type
- * matches one of the values.
- *
- * @return
- * @see TapestryConstants
- */
- String[] value() default {};
-
- /**
- * A list of component ids. The handler will only be invoked if the id of the event originating
- * component matches one of the values.
- *
- * @return
- */
- String[] component() default {};
-
-}
+package org.apache.tapestry.annotations;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Marks a method as a handler for a client side event. The handler method will be invoked when a
+ * component triggers an event. Filters on the type of event and on the originating component ensure
+ * that only the appropriate methods are invoked.
+ * <p>
+ * Client events include a <em>context</em> of one or more values. These context values are
+ * included in the action URI. The values are optionally supplied to the handler method as
+ * parameters. Automatic type coercions from string to the type of the actual parameter occur.
+ * <p>
+ * Handlers may return a value. Returning a non-null value will abort the handling of the event, and
+ * will usually control the response sent to the client web browser. The details are somewhat
+ * specific to the type of event and the component involved.
+ * <p>
+ * If a handler is not found within the originating component (or no handler aborts the event
+ * handling), then handlers within the containing component will be searched. This continues up the
+ * page hierarchy. In some cases, having no handlers (or no aborting handlers) is considered
+ * acceptible; in others, it is an error. Again, this is defined by the type of originating
+ * component, and the type of event.
+ * <p>
+ * <strong>If you fail to provide filters on either component or event type, then your method will
+ * be invoked for all component events, possibly including events that bubble up from embedded
+ * sub-components. </strong>
+ */
+@Target(ElementType.METHOD)
+@Retention(RUNTIME)
+@Documented
+public @interface OnEvent
+{
+
+ /**
+ * The event types to match. The handler will only be invoked if the client event type matches
+ * the value. If omitted, the default is to match any event. Most components emit, at most, one
+ * event named "action".
+ */
+ String value() default "";
+
+ /**
+ * The local id of the component from which the event originates. If not specified, then the
+ * default is to match any component. If an event from a component is not handled in the
+ * component's container, it is re-triggered inside the component's grand-container and will
+ * appear to originate from the container. Thus events that escape a component will appear to
+ * originate in the component's container, and so forth.
+ */
+ String component() default "";
+
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/GridColumns.java Sat Apr 21 11:54:22 2007
@@ -19,7 +19,6 @@
import org.apache.tapestry.Asset;
import org.apache.tapestry.annotations.Component;
import org.apache.tapestry.annotations.Inject;
-import org.apache.tapestry.annotations.OnEvent;
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.annotations.Path;
import org.apache.tapestry.beaneditor.PropertyModel;
@@ -85,9 +84,7 @@
return _columnModel.getId().equals(_sortColumnId);
}
- @OnEvent(component =
- { "sort", "sort2" })
- void sort(String columnId)
+ void onActionFromSort(String columnId)
{
if (columnId.equals(_sortColumnId))
{
@@ -99,6 +96,8 @@
_sortAscending = true;
}
}
+
+ void onActionFromSort2(String columnId) { onActionFromSort(columnId); }
public Asset getIcon()
{
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java Sat Apr 21 11:54:22 2007
@@ -18,7 +18,6 @@
import static org.apache.tapestry.ioc.internal.util.Defense.notNull;
import org.apache.tapestry.ComponentEventHandler;
-import org.apache.tapestry.ComponentResources;
import org.apache.tapestry.ioc.services.TypeCoercer;
import org.apache.tapestry.runtime.ComponentEvent;
@@ -62,24 +61,14 @@
* doesn't do quite the right think when an event bubbles up past its originating component's
* container (can lead to false matches).
*/
- public boolean matchesByComponentId(ComponentResources resources, String[] componentId)
+ public boolean matchesByComponentId(String componentId)
{
- for (String id : componentId)
- {
- if (id.equalsIgnoreCase(_originatingComponentId)) return true;
- }
-
- return false;
+ return _originatingComponentId.equalsIgnoreCase(componentId);
}
- public boolean matchesByEventType(String[] eventTypes)
+ public boolean matchesByEventType(String eventType)
{
- for (String type : eventTypes)
- {
- if (type.equalsIgnoreCase(_eventType)) return true;
- }
-
- return false;
+ return _eventType.equalsIgnoreCase(eventType);
}
public boolean matchesByParameterCount(int parameterCount)
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java Sat Apr 21 11:54:22 2007
@@ -17,6 +17,7 @@
import java.util.List;
import org.apache.tapestry.annotations.OnEvent;
+import org.apache.tapestry.ioc.internal.util.InternalUtils;
import org.apache.tapestry.ioc.util.BodyBuilder;
import org.apache.tapestry.model.MutableComponentModel;
import org.apache.tapestry.runtime.Component;
@@ -36,8 +37,6 @@
{
static final String OBJECT_ARRAY_TYPE = "java.lang.Object[]";
- private final String[] _empty = new String[0];
-
private final static int ANY_NUMBER_OF_PARAMETERS = -1;
public void transform(final ClassTransformation transformation, MutableComponentModel model)
@@ -89,32 +88,21 @@
OnEvent annotation = transformation.getMethodAnnotation(method, OnEvent.class);
- String[] eventTypes = extractEventTypes(method, annotation);
+ String eventType = extractEventType(method, annotation);
- if (eventTypes.length > 0)
+ if (InternalUtils.isNonBlank(eventType))
{
- String fieldName = transformation.addInjectedField(
- String[].class,
- "eventTypes",
- eventTypes);
-
- builder.addln("if ($1.matchesByEventType(%s))", fieldName);
+ builder.addln("if ($1.matchesByEventType(\"%s\"))", eventType);
builder.begin();
closeCount++;
}
- String[] componentIds = extractComponentIds(method, annotation);
+ String componentId = extractComponentId(method, annotation);
- if (componentIds.length > 0)
+ if (InternalUtils.isNonBlank(componentId))
{
- String fieldName = transformation.addInjectedField(
- String[].class,
- "componentIds",
- componentIds);
-
- builder.addln("if ($1.matchesByComponentId(%s, %s))", transformation
- .getResourcesFieldName(), fieldName);
+ builder.addln("if ($1.matchesByComponentId(\"%s\"))", componentId);
builder.begin();
closeCount++;
@@ -148,7 +136,7 @@
builder.end();
}
- private String[] extractComponentIds(MethodSignature method, OnEvent annotation)
+ private String extractComponentId(MethodSignature method, OnEvent annotation)
{
if (annotation != null) return annotation.component();
@@ -158,15 +146,12 @@
int fromx = name.indexOf("From");
- if (fromx < 0) return _empty;
-
- String componentId = name.substring(fromx + 4);
+ if (fromx < 0) return "";
- return new String[]
- { componentId };
+ return name.substring(fromx + 4);
}
- private String[] extractEventTypes(MethodSignature method, OnEvent annotation)
+ private String extractEventType(MethodSignature method, OnEvent annotation)
{
if (annotation != null) return annotation.value();
@@ -180,10 +165,9 @@
// This is intended for onAnyFromComponentId, but just onAny works too (and is dangerous).
- if (eventName.equalsIgnoreCase("AnyEvent")) return _empty;
+ if (eventName.equalsIgnoreCase("AnyEvent")) return "";
- return new String[]
- { eventName };
+ return eventName;
}
private int getParameterCount(MethodSignature method)
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentEvent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentEvent.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentEvent.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentEvent.java Sat Apr 21 11:54:22 2007
@@ -15,7 +15,6 @@
package org.apache.tapestry.runtime;
import org.apache.tapestry.ComponentEventHandler;
-import org.apache.tapestry.ComponentResources;
import org.apache.tapestry.ComponentResourcesCommon;
/**
@@ -32,17 +31,17 @@
* Returns true if the component event's type matches any of the provided values. Comparison is
* caseless.
*
- * @param eventTypes
+ * @param eventType
* @return true if there is any match
*/
- boolean matchesByEventType(String[] eventTypes);
+ boolean matchesByEventType(String eventType);
/**
* Returns true if the originating component matches any of the components identified by their
* ids. This filter is only relevent in the immediate container of the originating component (it
* will never match at higher levels). Comparison is caseless.
*/
- boolean matchesByComponentId(ComponentResources resources, String[] componentId);
+ boolean matchesByComponentId(String componentId);
/**
* Returns true if the event context contains the specified number of parameters (or more).
Modified: tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt Sat Apr 21 11:54:22 2007
@@ -125,9 +125,7 @@
+---+
If you event type is named "onAny", it will receive all types of events. This is rarely what you want!
-
- If for some unfathomable reason you want to be notified of the same event from multiple components in the same method, you'll need to use the OnEvent annotation.
-
+
Note from Howard: I've found that I prefer the naming convention approach, and reserve the annotation just for situations that don't otherwise fit.
Event Context
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/base/BaseEventHandlerDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/base/BaseEventHandlerDemo.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/base/BaseEventHandlerDemo.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/base/BaseEventHandlerDemo.java Sat Apr 21 11:54:22 2007
@@ -59,7 +59,7 @@
}
- @OnEvent(value = "action")
+ @OnEvent("action")
void eventHandlerZero()
{
addMethodName("parent.eventHandlerZero()");
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app2/pages/TestPageForSubmit.java Sat Apr 21 11:54:22 2007
@@ -15,7 +15,6 @@
package org.apache.tapestry.integration.app2.pages;
import org.apache.tapestry.annotations.Component;
-import org.apache.tapestry.annotations.OnEvent;
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.corelib.components.Form;
import org.apache.tapestry.corelib.components.Submit;
@@ -60,11 +59,14 @@
this.value = value;
}
- @OnEvent(component =
- { "capitalize1", "capitalize2" }, value = "selected")
- public void onCapitalize()
+ void onSelectedFromCapitalize1()
{
value = value.toUpperCase();
+ }
+
+ void onSelectedFromCapitalize2()
+ {
+ onSelectedFromCapitalize1();
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java Sat Apr 21 11:54:22 2007
@@ -49,10 +49,8 @@
ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler,
_coercer);
- assertTrue(event.matchesByEventType(new String[]
- { "foo", "eventType", "bar" }));
- assertFalse(event.matchesByEventType(new String[]
- { "foo", "bar" }));
+ assertTrue(event.matchesByEventType("eventType"));
+ assertFalse(event.matchesByEventType("foo"));
verify();
}
@@ -67,8 +65,7 @@
ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler,
_coercer);
- assertTrue(event.matchesByEventType(new String[]
- { "EVENTTYPE" }));
+ assertTrue(event.matchesByEventType("EVENTTYPE"));
verify();
}
@@ -79,13 +76,13 @@
ComponentEventHandler handler = mockComponentEventHandler();
replay();
+
ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler,
_coercer);
- assertTrue(event.matchesByComponentId(null, new String[]
- { "foo", "someId", "bar" }));
- assertFalse(event.matchesByComponentId(null, new String[]
- { "foo", "bar" }));
+ assertTrue(event.matchesByComponentId("someId"));
+
+ assertFalse(event.matchesByComponentId("bar"));
verify();
}
@@ -99,8 +96,7 @@
ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler,
_coercer);
- assertTrue(event.matchesByComponentId(null, new String[]
- { "SOMEID" }));
+ assertTrue(event.matchesByComponentId("SOMEID"));
verify();
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java Sat Apr 21 11:54:22 2007
@@ -1049,10 +1049,8 @@
// Check that the attributes of the annotation match the expectation.
- assertEquals(annotation.value(), new String[]
- { "fred", "barney" });
- assertEquals(annotation.component(), new String[]
- { "alpha", "beta" });
+ assertEquals(annotation.value(), "fred");
+ assertEquals(annotation.component(), "alpha");
verify();
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/pages/EventHandlerTarget.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/pages/EventHandlerTarget.java?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/pages/EventHandlerTarget.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/pages/EventHandlerTarget.java Sat Apr 21 11:54:22 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -12,19 +12,14 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry.internal.transform.pages;
-
-import org.apache.tapestry.annotations.OnEvent;
-
-/**
- *
- */
-public class EventHandlerTarget
-{
- @OnEvent(value =
- { "fred", "barney" }, component =
- { "alpha", "beta" })
- public void handler()
- {
- }
-}
+package org.apache.tapestry.internal.transform.pages;
+
+import org.apache.tapestry.annotations.OnEvent;
+
+public class EventHandlerTarget
+{
+ @OnEvent(value = "fred", component = "alpha")
+ public void handler()
+ {
+ }
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties?view=diff&rev=531082&r1=531081&r2=531082
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties Sat Apr 21 11:54:22 2007
@@ -28,5 +28,3 @@
log4j.category.org.apache.tapestry.integration.app1=error
log4j.category.org.apache.tapestry.corelib=error
-log4j.category.org.apache.tapestry.integration.app1.pages.Localization=debug
-