001: /*
002: * $Id: AjaxFormValidatingBehavior.java 5113 2006-03-25 01:48:00 -0800 (Sat, 25
003: * Mar 2006) ivaynberg $ $Revision: 462057 $ $Date: 2006-03-25 01:48:00 -0800
004: * (Sat, 25 Mar 2006) $
005: *
006: * ==============================================================================
007: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
008: * use this file except in compliance with the License. You may obtain a copy of
009: * the License at
010: *
011: * http://www.apache.org/licenses/LICENSE-2.0
012: *
013: * Unless required by applicable law or agreed to in writing, software
014: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
015: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
016: * License for the specific language governing permissions and limitations under
017: * the License.
018: */
019: package wicket.ajax.form;
020:
021: import wicket.Component;
022: import wicket.Component.IVisitor;
023: import wicket.ajax.AjaxRequestTarget;
024: import wicket.feedback.IFeedback;
025: import wicket.markup.html.form.Form;
026: import wicket.markup.html.form.FormComponent;
027: import wicket.util.time.Duration;
028:
029: /**
030: * Ajax event behavior that submits the form and updates all form feedback
031: * panels on the page. Useful for providing instant feedback.
032: *
033: * @since 1.2
034: *
035: * @author Igor Vaynberg (ivaynberg)
036: *
037: */
038: public class AjaxFormValidatingBehavior extends AjaxFormSubmitBehavior {
039: private static final long serialVersionUID = 1L;
040:
041: /**
042: * Construct.
043: *
044: * @param form
045: * form that will be submitted via ajax
046: * @param event
047: * javascript event this behavior will be invoked on, like
048: * onclick
049: */
050: public AjaxFormValidatingBehavior(Form form, String event) {
051: super (form, event);
052: }
053:
054: protected void onSubmit(final AjaxRequestTarget target) {
055: addFeedbackPanels(target);
056: }
057:
058: protected void onError(AjaxRequestTarget target) {
059: addFeedbackPanels(target);
060: }
061:
062: /**
063: * Adds all feedback panels on the page to the ajax request target so they
064: * are updated
065: *
066: * @param target
067: */
068: private void addFeedbackPanels(final AjaxRequestTarget target) {
069: getComponent().getPage().visitChildren(IFeedback.class,
070: new IVisitor() {
071: public Object component(Component component) {
072: target.addComponent(component);
073: return IVisitor.CONTINUE_TRAVERSAL;
074: }
075:
076: });
077: }
078:
079: /**
080: * Adds this behavior to all form components of the specified form
081: *
082: * @param form
083: * @param event
084: */
085: public static void addToAllFormComponents(final Form form,
086: final String event) {
087: addToAllFormComponents(form, event, null);
088: }
089:
090: /**
091: * Adds this behavior to all form components of the specified form
092: *
093: * @param form
094: * @param event
095: * @param throttleDelay
096: */
097: public static void addToAllFormComponents(final Form form,
098: final String event, final Duration throttleDelay) {
099: form.visitChildren(FormComponent.class, new IVisitor() {
100: public Object component(Component component) {
101: AjaxFormValidatingBehavior behavior = new AjaxFormValidatingBehavior(
102: form, event);
103: if (throttleDelay != null) {
104: behavior.setThrottleDelay(throttleDelay);
105: }
106: component.add(behavior);
107: return IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
108: }
109:
110: });
111: }
112:
113: }
|