001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.wicket.examples.ajax.builtin;
018:
019: import org.apache.wicket.IClusterable;
020: import org.apache.wicket.ajax.AjaxRequestTarget;
021: import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
022: import org.apache.wicket.ajax.markup.html.form.AjaxButton;
023: import org.apache.wicket.markup.html.form.Form;
024: import org.apache.wicket.markup.html.form.FormComponent;
025: import org.apache.wicket.markup.html.form.RequiredTextField;
026: import org.apache.wicket.markup.html.form.SimpleFormComponentLabel;
027: import org.apache.wicket.markup.html.panel.FeedbackPanel;
028: import org.apache.wicket.model.CompoundPropertyModel;
029: import org.apache.wicket.model.ResourceModel;
030: import org.apache.wicket.util.time.Duration;
031: import org.apache.wicket.validation.validator.EmailAddressValidator;
032: import org.apache.wicket.validation.validator.StringValidator;
033:
034: /**
035: * Page to demonstrate instant ajax validaion feedback. Validation is triggered
036: * as the user is typing, but is throttled so that only one ajax call is made to
037: * the server per second.
038: *
039: * @author Igor Vaynberg (ivaynberg)
040: */
041: public class FormPage extends BasePage {
042: private Bean bean = new Bean();
043:
044: /**
045: * Constructor
046: */
047: public FormPage() {
048: // create feedback panel to show errors
049: final FeedbackPanel feedback = new FeedbackPanel("feedback");
050: feedback.setOutputMarkupId(true);
051: add(feedback);
052:
053: // add form with markup id setter so it can be updated via ajax
054: Form form = new Form("form", new CompoundPropertyModel(bean));
055: add(form);
056: form.setOutputMarkupId(true);
057:
058: FormComponent fc;
059:
060: // add form components to the form as usual
061:
062: fc = new RequiredTextField("name");
063: fc.add(StringValidator.minimumLength(4));
064: fc.setLabel(new ResourceModel("label.name"));
065:
066: form.add(fc);
067: form.add(new SimpleFormComponentLabel("name-label", fc));
068:
069: fc = new RequiredTextField("email");
070: fc.add(EmailAddressValidator.getInstance());
071: fc.setLabel(new ResourceModel("label.email"));
072:
073: form.add(fc);
074: form.add(new SimpleFormComponentLabel("email-label", fc));
075:
076: // attach an ajax validation behavior to all form component's onkeydown
077: // event and throttle it down to once per second
078:
079: AjaxFormValidatingBehavior.addToAllFormComponents(form,
080: "onkeyup", Duration.ONE_SECOND);
081:
082: // add a button that can be used to submit the form via ajax
083: form.add(new AjaxButton("ajax-button", form) {
084: protected void onSubmit(AjaxRequestTarget target, Form form) {
085: // repaint the feedback panel so that it is hidden
086: target.addComponent(feedback);
087: }
088:
089: protected void onError(AjaxRequestTarget target, Form form) {
090: // repaint the feedback panel so errors are shown
091: target.addComponent(feedback);
092: }
093: });
094: }
095:
096: /** simple java bean. */
097: public static class Bean implements IClusterable {
098: private String name, email;
099:
100: /**
101: * Gets email.
102: *
103: * @return email
104: */
105: public String getEmail() {
106: return email;
107: }
108:
109: /**
110: * Sets email.
111: *
112: * @param email
113: * email
114: */
115: public void setEmail(String email) {
116: this .email = email;
117: }
118:
119: /**
120: * Gets name.
121: *
122: * @return name
123: */
124: public String getName() {
125: return name;
126: }
127:
128: /**
129: * Sets name.
130: *
131: * @param name
132: * name
133: */
134: public void setName(String name) {
135: this.name = name;
136: }
137: }
138: }
|