001: /*
002: * $Id: FormPage.java 4916 2006-03-13 23:15:39 -0800 (Mon, 13 Mar 2006)
003: * ivaynberg $ $Revision: 464050 $ $Date: 2006-03-13 23:15:39 -0800 (Mon, 13 Mar
004: * 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.examples.ajax.builtin;
020:
021: import java.io.Serializable;
022:
023: import wicket.ajax.AjaxRequestTarget;
024: import wicket.ajax.form.AjaxFormValidatingBehavior;
025: import wicket.ajax.markup.html.form.AjaxSubmitButton;
026: import wicket.markup.html.form.Form;
027: import wicket.markup.html.form.FormComponent;
028: import wicket.markup.html.form.RequiredTextField;
029: import wicket.markup.html.form.SimpleFormComponentLabel;
030: import wicket.markup.html.form.validation.EmailAddressPatternValidator;
031: import wicket.markup.html.form.validation.StringValidator;
032: import wicket.markup.html.panel.FeedbackPanel;
033: import wicket.model.CompoundPropertyModel;
034: import wicket.model.ResourceModel;
035: import wicket.util.time.Duration;
036:
037: /**
038: * Page to demonstrate instant ajax validaion feedback. Validation is triggered
039: * as the user is typing, but is throttled so that only one ajax call is made to
040: * the server per second.
041: *
042: * @author Igor Vaynberg (ivaynberg)
043: */
044: public class FormPage extends BasePage {
045: private Bean bean = new Bean();
046:
047: /**
048: * Constructor
049: */
050: public FormPage() {
051: // create feedback panel to show errors
052: final FeedbackPanel feedback = new FeedbackPanel("feedback");
053: feedback.setOutputMarkupId(true);
054: add(feedback);
055:
056: // add form with markup id setter so it can be updated via ajax
057: Form form = new Form("form", new CompoundPropertyModel(bean));
058: add(form);
059: form.setOutputMarkupId(true);
060:
061: FormComponent fc;
062:
063: // add form components to the form as usual
064:
065: fc = new RequiredTextField("name");
066: fc.add(StringValidator.minimumLength(4));
067: fc.setLabel(new ResourceModel("label.name"));
068:
069: form.add(fc);
070: form.add(new SimpleFormComponentLabel("name-label", fc));
071:
072: fc = new RequiredTextField("email");
073: fc.add(EmailAddressPatternValidator.getInstance());
074: fc.setLabel(new ResourceModel("label.email"));
075:
076: form.add(fc);
077: form.add(new SimpleFormComponentLabel("email-label", fc));
078:
079: // attach an ajax validation behavior to all form component's onkeydown
080: // event and throttle it down to once per second
081:
082: AjaxFormValidatingBehavior.addToAllFormComponents(form,
083: "onkeyup", Duration.ONE_SECOND);
084:
085: // add a button that can be used to submit the form via ajax
086: form.add(new AjaxSubmitButton("ajax-submit-button", form) {
087: protected void onSubmit(AjaxRequestTarget target, Form form) {
088: // repaint the feedback panel so that it is hidden
089: target.addComponent(feedback);
090: }
091:
092: protected void onError(AjaxRequestTarget target, Form form) {
093: // repaint the feedback panel so errors are shown
094: target.addComponent(feedback);
095: }
096: });
097: }
098:
099: /** simple java bean. */
100: public static class Bean implements Serializable {
101: private String name, email;
102:
103: /**
104: * Gets email.
105: *
106: * @return email
107: */
108: public String getEmail() {
109: return email;
110: }
111:
112: /**
113: * Sets email.
114: *
115: * @param email
116: * email
117: */
118: public void setEmail(String email) {
119: this .email = email;
120: }
121:
122: /**
123: * Gets name.
124: *
125: * @return name
126: */
127: public String getName() {
128: return name;
129: }
130:
131: /**
132: * Sets name.
133: *
134: * @param name
135: * name
136: */
137: public void setName(String name) {
138: this.name = name;
139: }
140: }
141: }
|