You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2007/03/05 07:06:46 UTC
svn commit: r514560 - in /tapestry/tapestry4/trunk:
tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/
tapestry-framework/src/java/org/apache/tapestry/
tapestry-framework/src/java/org/apache/tapestry/engine/
tapestry-framework/src/java...
Author: jkuhnert
Date: Sun Mar 4 22:06:44 2007
New Revision: 514560
URL: http://svn.apache.org/viewvc?view=rev&rev=514560
Log:
Resolves TAPESTRY-1268. EventListener focus attribute wasn't properly being propogated to FormSupportImpl focus check. Added new
property to RequestCycle to handle this global "focus" state.
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Dates.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Dates.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Dates.java?view=diff&rev=514560&r1=514559&r2=514560
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Dates.java (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Dates.java Sun Mar 4 22:06:44 2007
@@ -34,7 +34,7 @@
public abstract IValidationDelegate getDelegate();
- @EventListener(targets = "startDate", events = {"onchange"}, submitForm = "dateForm")
+ @EventListener(targets = "startDate", events = {"onchange"}, submitForm = "dateForm", focus = false)
public void startChanged()
{
if (getStartDate() == null)
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java?view=diff&rev=514560&r1=514559&r2=514560
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java Sun Mar 4 22:06:44 2007
@@ -253,6 +253,17 @@
void rewindForm(IForm form);
/**
+ * Sets client side form focus off globally for all forms in this request cycle.
+ */
+ void disableFocus();
+
+ /**
+ * Check for global focus being disabled.
+ * @return True if focus is disabled, false otherwise.
+ */
+ boolean isFocusDisabled();
+
+ /**
* Invoked by a {@link IEngineService service} to store an array of application-specific
* parameters. These can later be retrieved (typically, by an application-specific listener
* method) by invoking {@link #getListenerParameters()}.
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java?view=diff&rev=514560&r1=514559&r2=514560
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java Sun Mar 4 22:06:44 2007
@@ -126,6 +126,8 @@
private Stack _renderStack = new Stack();
+ private boolean _focusDisabled = false;
+
/**
* Standard constructor used to render a response page.
*
@@ -189,7 +191,6 @@
_loadedPages = null;
_pageRecorders = null;
_renderStack.clear();
-
}
public IEngineService getService()
@@ -488,6 +489,22 @@
reset();
_rewinding = false;
}
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void disableFocus()
+ {
+ _focusDisabled = true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isFocusDisabled()
+ {
+ return _focusDisabled;
}
public void setAttribute(String name, Object value)
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java?view=diff&rev=514560&r1=514559&r2=514560
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java Sun Mar 4 22:06:44 2007
@@ -488,8 +488,7 @@
return Integer.parseInt(input.substring(index, input.length()));
}
- public void render(String method, IRender informalParametersRenderer, ILink link,
- String scheme, Integer port)
+ public void render(String method, IRender informalParametersRenderer, ILink link, String scheme, Integer port)
{
String formId = _form.getName();
@@ -554,7 +553,7 @@
// If the form doesn't support focus, or the focus has already been set by a different form,
// then do nothing.
- if (fieldId != null && _form.getFocus()
+ if (!_cycle.isFocusDisabled() && fieldId != null && _form.getFocus()
&& _cycle.getAttribute(FIELD_FOCUS_ATTRIBUTE) == null) {
_pageRenderSupport.addInitializationScript(_form, "dojo.require(\"tapestry.form\");tapestry.form.focusField('" + fieldId + "');");
@@ -564,6 +563,7 @@
// register the validation profile with client side form manager
if (_form.isClientValidationEnabled()) {
+
_pageRenderSupport.addInitializationScript(_form, "dojo.require(\"tapestry.form\");tapestry.form.clearProfiles('"
+ formId + "'); tapestry.form.registerProfile('" + formId + "',"
+ _profile.toString() + ");");
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java?view=diff&rev=514560&r1=514559&r2=514560
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java Sun Mar 4 22:06:44 2007
@@ -28,7 +28,6 @@
import org.apache.tapestry.event.BrowserEvent;
import org.apache.tapestry.event.ResetEventListener;
import org.apache.tapestry.form.FormSupport;
-import org.apache.tapestry.form.FormSupportImpl;
import org.apache.tapestry.internal.event.ComponentEventProperty;
import org.apache.tapestry.internal.event.EventBoundListener;
import org.apache.tapestry.internal.event.IComponentEventInvoker;
@@ -82,7 +81,7 @@
if (comps == null)
return;
- boolean disableFocus = true;
+ boolean disableFocus = false;
for (int i=0; i < comps.size(); i++) {
@@ -106,8 +105,8 @@
continue;
// handle disabling focus
- if (listeners[e].shouldFocusForm())
- disableFocus = false;
+ if (!disableFocus && !listeners[e].shouldFocusForm())
+ disableFocus = true;
// defer execution until after form is done rewinding
@@ -120,9 +119,9 @@
// Form uses cycle attributes to test whether or not to focus .
// The attribute existing at all is enough to bypass focusing.
- if (disableFocus){
+ if (disableFocus) {
- cycle.setAttribute(FormSupportImpl.FIELD_FOCUS_ATTRIBUTE, Boolean.TRUE);
+ cycle.disableFocus();
}
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java?view=diff&rev=514560&r1=514559&r2=514560
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java Sun Mar 4 22:06:44 2007
@@ -233,6 +233,8 @@
trainGetFocusField(delegate, "wilma");
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
// effectively means someone else has already claimed focus
trainGetFieldFocus(cycle, null);
@@ -365,6 +367,8 @@
trainGetFocusField(delegate, null);
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
replay();
fs.render("post", render, link, null, null);
@@ -435,6 +439,8 @@
trainGetFocusField(delegate, null);
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
replay();
fs.render("post", render, link, null, null);
@@ -576,6 +582,8 @@
trainGetFocusField(delegate, null);
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
replay();
fs.render("post", render, link, null, null);
@@ -756,6 +764,8 @@
trainGetFocusField(delegate, null);
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
replay();
fs.render("post", render, link, null, null);
@@ -827,9 +837,11 @@
nested.close();
writer.end();
-
+
trainGetFocusField(delegate, null);
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
replay();
fs.render("post", render, link, null, null);
@@ -1113,6 +1125,8 @@
trainGetFocusField(delegate, "barney");
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
// Side test: check for another form already grabbing focus
trainGetFieldFocus(cycle, null);
@@ -1203,6 +1217,8 @@
trainGetFocusField(delegate, null);
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
replay();
fs.render("post", render, link, null, null);
@@ -1270,6 +1286,8 @@
trainGetFocusField(delegate, "barney");
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
// Side test: check for another form already grabbing focus
trainGetFieldFocus(cycle, Boolean.TRUE);
@@ -1449,6 +1467,8 @@
trainGetFocusField(delegate, null);
+ expect(cycle.isFocusDisabled()).andReturn(false);
+
replay();
fs.render("post", render, link, null, null);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java?view=diff&rev=514560&r1=514559&r2=514560
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java Sun Mar 4 22:06:44 2007
@@ -29,7 +29,6 @@
import org.apache.tapestry.event.BrowserEvent;
import org.apache.tapestry.event.EventTarget;
import org.apache.tapestry.form.FormSupport;
-import org.apache.tapestry.form.FormSupportImpl;
import org.apache.tapestry.internal.event.ComponentEventProperty;
import org.apache.tapestry.listener.ListenerInvoker;
import org.apache.tapestry.listener.ListenerMap;
@@ -223,7 +222,7 @@
form.addDeferredRunnable(isA(Runnable.class));
- cycle.setAttribute(FormSupportImpl.FIELD_FOCUS_ATTRIBUTE, Boolean.TRUE);
+ cycle.disableFocus();
replay();