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. */
