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();