Updated Branches:
  refs/heads/master bcc1930b0 -> 4e165c4b5

WICKET-3367
Rewrite all JavaScript inline event handlers to be proper attached event 
handlers

Re-enable AjaxFormChoiceComponentBehavior.


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/4e165c4b
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/4e165c4b
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/4e165c4b

Branch: refs/heads/master
Commit: 4e165c4b5ee37b3cb560150327d43048d79edfc5
Parents: cd8521a
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Wed Jan 18 11:37:46 2012 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Wed Jan 18 11:37:46 2012 +0100

----------------------------------------------------------------------
 .../wicket/ajax/AbstractDefaultAjaxBehavior.java   |   22 +-----------
 .../org/apache/wicket/ajax/AjaxEventBehavior.java  |   26 +++++++++++++
 .../AjaxFormChoiceComponentUpdatingBehavior.java   |   29 ++++++---------
 .../wicket/examples/compref/RadioChoicePage.java   |   17 ++++++++-
 4 files changed, 54 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/4e165c4b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
 
b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
index 4738422..ca7657f 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
@@ -89,26 +89,6 @@ public abstract class AbstractDefaultAjaxBehavior extends 
AbstractAjaxBehavior
                        "\";", "wicket-ajax-base-url"));
 
                renderExtraHeaderContributors(component, response);
-
-               if (component.isEnabledInHierarchy())
-               {
-                       StringBuilder js = new StringBuilder();
-                       js.append("Wicket.Ajax.ajax(");
-
-                       js.append(renderAjaxAttributes(component));
-
-                       js.append(");");
-
-                       AjaxRequestTarget target = 
requestCycle.find(AjaxRequestTarget.class);
-                       if (target == null)
-                       {
-                               
response.render(OnDomReadyHeaderItem.forScript(js.toString()));
-                       }
-                       else
-                       {
-                               target.appendJavaScript(js);
-                       }
-               }
        }
 
        /**
@@ -509,7 +489,7 @@ public abstract class AbstractDefaultAjaxBehavior extends 
AbstractAjaxBehavior
                if (attributes.getExtraParameters().isEmpty())
                        sb.append("attrs.ep = params;\n");
                else
-                       sb.append("attrs.ep = jQuery.extend(attrs.ep, 
params);\n");
+                       sb.append("attrs.ep = jQuery.extend({}, attrs.ep, 
params);\n");
                sb.append("Wicket.Ajax.ajax(attrs);\n");
                return sb;
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/4e165c4b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java 
b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
index 5923e1b..8ebe831 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
@@ -74,6 +74,32 @@ public abstract class AjaxEventBehavior extends 
AbstractDefaultAjaxBehavior
        }
 
        @Override
+       public void renderHead(final Component component, final IHeaderResponse 
response)
+       {
+               super.renderHead(component, response);
+
+               if (component.isEnabledInHierarchy())
+               {
+                       StringBuilder js = new StringBuilder();
+                       js.append("Wicket.Ajax.ajax(");
+
+                       js.append(renderAjaxAttributes(component));
+
+                       js.append(");");
+
+                       AjaxRequestTarget target = 
component.getRequestCycle().find(AjaxRequestTarget.class);
+                       if (target == null)
+                       {
+                               
response.render(OnDomReadyHeaderItem.forScript(js.toString()));
+                       }
+                       else
+                       {
+                               target.appendJavaScript(js);
+                       }
+               }
+       }
+
+       @Override
        protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
        {
                super.updateAjaxAttributes(attributes);

http://git-wip-us.apache.org/repos/asf/wicket/blob/4e165c4b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
 
b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
index 1cb9d2a..c045f95 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
@@ -34,7 +34,7 @@ import org.apache.wicket.util.string.AppendingStringBuffer;
  * This is a Ajax Component Update Behavior that is meant for choices/groups 
that are not one
  * component in the html but many.
  * <p>
- * Use the normal {@link AjaxFormChoiceComponentUpdatingBehavior} for the 
normal single component
+ * Use the normal {@link AjaxFormComponentUpdatingBehavior} for the normal 
single component
  * fields
  * <p>
  * In order to be supported by this behavior the group components must output 
children with markup
@@ -47,7 +47,6 @@ import org.apache.wicket.util.string.AppendingStringBuffer;
  * @see RadioGroup
  * @see CheckGroup
  */
-// TODO Wicket 6.0 FIXME See hot to use the new AjaxRequestAttributes here
 public abstract class AjaxFormChoiceComponentUpdatingBehavior extends 
AbstractDefaultAjaxBehavior
 {
        private static final long serialVersionUID = 1L;
@@ -58,7 +57,7 @@ public abstract class AjaxFormChoiceComponentUpdatingBehavior 
extends AbstractDe
                super.renderHead(component, response);
 
                AppendingStringBuffer asb = new AppendingStringBuffer();
-               asb.append("function attachChoiceHandlers(markupId, 
callbackScript) {\n");
+               asb.append("function attachChoiceHandlers(markupId, attrs, 
callbackScript) {\n");
                asb.append(" var inputNodes = 
Wicket.$(markupId).getElementsByTagName('input');\n");
                asb.append(" for (var i = 0 ; i < inputNodes.length ; i ++) 
{\n");
                asb.append(" var inputNode = inputNodes[i];\n");
@@ -66,15 +65,17 @@ public abstract class 
AjaxFormChoiceComponentUpdatingBehavior extends AbstractDe
                asb.append(" if 
(!(inputNode.className.indexOf('wicket-'+markupId)>=0)&&!(inputNode.id.indexOf(markupId+'-')>=0))
 continue;\n");
                asb.append(" var inputType = inputNode.type.toLowerCase();\n");
                asb.append(" if (inputType === 'checkbox' || inputType === 
'radio') {\n");
-               asb.append(" Wicket.Event.add(inputNode, 'click', 
callbackScript);\n");
+               asb.append(" \tvar dataAttrs = jQuery.extend({}, attrs, {c: 
inputNode.id});\n");
+               asb.append(" \tWicket.Event.add(inputNode, 'click', 
callbackScript, dataAttrs);\n");
                asb.append(" }\n");
                asb.append(" }\n");
                asb.append("}\n");
 
-               response.render(JavaScriptHeaderItem.forScript(asb, 
"attachChoice"));
+               response.render(JavaScriptHeaderItem.forScript(asb, 
"attachChoice-"+component.getMarkupId()));
 
-               
response.render(OnLoadHeaderItem.forScript("attachChoiceHandlers('" +
-                       getComponent().getMarkupId() + "', function() {" + 
getEventHandler() + "});"));
+               String onLoadScript = String.format("attachChoiceHandlers('%s', 
%s, function(event) { \n\tWicket.Ajax.ajax(event.data);\n})",
+                               component.getMarkupId(), 
renderAjaxAttributes(component));
+               response.render(OnLoadHeaderItem.forScript(onLoadScript));
 
        }
 
@@ -83,6 +84,7 @@ public abstract class AjaxFormChoiceComponentUpdatingBehavior 
extends AbstractDe
         * has been updated.
         * 
         * @param target
+        *      the current request handler
         */
        protected abstract void onUpdate(AjaxRequestTarget target);
 
@@ -94,7 +96,9 @@ public abstract class AjaxFormChoiceComponentUpdatingBehavior 
extends AbstractDe
         * FormComponent
         * 
         * @param target
+        *      the current request handler
         * @param e
+        *      the error that occurred while updating the component
         */
        protected void onError(AjaxRequestTarget target, RuntimeException e)
        {
@@ -135,16 +139,6 @@ public abstract class 
AjaxFormChoiceComponentUpdatingBehavior extends AbstractDe
        }
 
        /**
-        * @return event handler
-        */
-       protected final CharSequence getEventHandler()
-       {
-               return new AppendingStringBuffer("Wicket.Ajax.post('").append(
-                       getCallbackUrl()).append(
-                       "', Wicket.Form.serialize('" + 
getComponent().getMarkupId() + "',false)");
-       }
-
-       /**
         * 
         * @see 
org.apache.wicket.ajax.AbstractDefaultAjaxBehavior#respond(org.apache.wicket.ajax.AjaxRequestTarget)
         */
@@ -179,6 +173,7 @@ public abstract class 
AjaxFormChoiceComponentUpdatingBehavior extends AbstractDe
 
        /**
         * @param component
+        *      the component to check
         * @return if the component applies to the {@link 
AjaxFormChoiceComponentUpdatingBehavior}
         */
        static boolean appliesTo(Component component)

http://git-wip-us.apache.org/repos/asf/wicket/blob/4e165c4b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/RadioChoicePage.java
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/RadioChoicePage.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/RadioChoicePage.java
index 8fa71bb..edc1efc 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/compref/RadioChoicePage.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/compref/RadioChoicePage.java
@@ -20,6 +20,8 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.wicket.IClusterable;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
 import org.apache.wicket.examples.WicketExamplePage;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.RadioChoice;
@@ -46,7 +48,8 @@ public class RadioChoicePage extends WicketExamplePage
                setDefaultModel(new CompoundPropertyModel<Input>(input));
 
                // Add a FeedbackPanel for displaying our messages
-               FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
+               final FeedbackPanel feedbackPanel = new 
FeedbackPanel("feedback");
+               feedbackPanel.setOutputMarkupId(true);
                add(feedbackPanel);
 
                // Add a form with an onSumbit implementation that sets a 
message
@@ -64,7 +67,17 @@ public class RadioChoicePage extends WicketExamplePage
                // designate the
                // current selection, and that uses the SITES list for the 
available
                // options.
-               form.add(new RadioChoice<String>("site", SITES));
+               RadioChoice<String> sites = new RadioChoice<String>("site", 
SITES);
+               sites.add(new AjaxFormChoiceComponentUpdatingBehavior()
+               {
+                       @Override
+                       protected void onUpdate(AjaxRequestTarget target)
+                       {
+                               info("Selected: " + 
getComponent().getDefaultModelObjectAsString());
+                               target.add(feedbackPanel);
+                       }
+               });
+               form.add(sites);
        }
 
        /** Simple data class that acts as a model for the input fields. */

Reply via email to