diff options
author | Joonas Lehtinen <joonas.lehtinen@itmill.com> | 2008-05-19 08:58:08 +0000 |
---|---|---|
committer | Joonas Lehtinen <joonas.lehtinen@itmill.com> | 2008-05-19 08:58:08 +0000 |
commit | 5c921be9b94c4944b00fb767a32cbb3fd97e59e5 (patch) | |
tree | e0c54ab6dd4ca3a82c6635c9ff90119627b0841d /src | |
parent | c8309b4da579b11b2c54c39b90f1109b2e6865dc (diff) | |
download | vaadin-framework-5c921be9b94c4944b00fb767a32cbb3fd97e59e5.tar.gz vaadin-framework-5c921be9b94c4944b00fb767a32cbb3fd97e59e5.zip |
Fixes #1661
svn changeset:4539/svn branch:trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/com/itmill/toolkit/tests/tickets/Ticket846.java | 86 | ||||
-rw-r--r-- | src/com/itmill/toolkit/ui/AbstractField.java | 51 |
2 files changed, 91 insertions, 46 deletions
diff --git a/src/com/itmill/toolkit/tests/tickets/Ticket846.java b/src/com/itmill/toolkit/tests/tickets/Ticket846.java index 8fa5bab992..75066890f4 100644 --- a/src/com/itmill/toolkit/tests/tickets/Ticket846.java +++ b/src/com/itmill/toolkit/tests/tickets/Ticket846.java @@ -1,6 +1,5 @@ package com.itmill.toolkit.tests.tickets; - import com.itmill.toolkit.Application; import com.itmill.toolkit.data.Validator; import com.itmill.toolkit.data.util.MethodProperty; @@ -10,45 +9,50 @@ import com.itmill.toolkit.ui.Window; public class Ticket846 extends Application { - public void init() { - - final Window mainWin = new Window("Test app for #846"); - setMainWindow(mainWin); - - final TextField tx = new TextField("Integer"); - mainWin.addComponent(tx); - tx.setImmediate(true); - tx.addValidator(new Validator() { - - public boolean isValid(Object value) { - try { - Integer.parseInt("" + value); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) - throw new InvalidValueException(value + " is not a number"); - } - }); - - final String[] visibleProps = {"required","invalidAllowed","readOnly","readThrough","invalidCommitted"}; - for (int i=0;i<visibleProps.length; i++ ) { - Button b = new Button(visibleProps[i],new MethodProperty(tx,visibleProps[i])); - b.setImmediate(true); - mainWin.addComponent(b); - } - - mainWin.addComponent(new Button("Validate integer", - new Button.ClickListener() { - public void buttonClick( - com.itmill.toolkit.ui.Button.ClickEvent event) { - mainWin.showNotification("The field is " + (tx.isValid()?"":"not ") + "valid"); - }; - })); - } + public void init() { + + final Window mainWin = new Window("Test app for #846"); + setMainWindow(mainWin); + + final TextField tx = new TextField("Integer"); + mainWin.addComponent(tx); + tx.setImmediate(true); + tx.addValidator(new Validator() { + + public boolean isValid(Object value) { + try { + Integer.parseInt("" + value); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + public void validate(Object value) throws InvalidValueException { + if (!isValid(value)) { + throw new InvalidValueException(value + " is not a number"); + } + } + }); + + final String[] visibleProps = { "required", "invalidAllowed", + "readOnly", "readThrough", "invalidCommitted", + "validationVisible" }; + for (int i = 0; i < visibleProps.length; i++) { + Button b = new Button(visibleProps[i], new MethodProperty(tx, + visibleProps[i])); + b.setImmediate(true); + mainWin.addComponent(b); + } + + mainWin.addComponent(new Button("Validate integer", + new Button.ClickListener() { + public void buttonClick( + com.itmill.toolkit.ui.Button.ClickEvent event) { + mainWin.showNotification("The field is " + + (tx.isValid() ? "" : "not ") + "valid"); + }; + })); + } } diff --git a/src/com/itmill/toolkit/ui/AbstractField.java b/src/com/itmill/toolkit/ui/AbstractField.java index 7fef394a97..fb251d70b6 100644 --- a/src/com/itmill/toolkit/ui/AbstractField.java +++ b/src/com/itmill/toolkit/ui/AbstractField.java @@ -110,6 +110,11 @@ public abstract class AbstractField extends AbstractComponent implements Field, */ private boolean required = false; + /** + * Is automatic validation enabled. + */ + private boolean validationVisible = true; + /* Component basics ************************************************ */ /* @@ -691,12 +696,14 @@ public abstract class AbstractField extends AbstractComponent implements Field, */ public ErrorMessage getErrorMessage() { - // Check validation errors + // Check validation errors only if automatic validation is enabled ErrorMessage validationError = null; - try { - validate(); - } catch (Validator.InvalidValueException e) { - validationError = e; + if (isValidationVisible()) { + try { + validate(); + } catch (Validator.InvalidValueException e) { + validationError = e; + } } // Check if there are any systems errors @@ -976,4 +983,38 @@ public abstract class AbstractField extends AbstractComponent implements Field, requestRepaint(); } + /** + * Is automatic, visible validation enabled? + * + * If automatic validation is enabled, any validators connected to this + * component are evaluated while painting the component and potential error + * messages are sent to client. If the automatic validation is turned off, + * isValid() and validate() methods still work, but one must show the + * validation in their own code. + * + * @return True, if automatic validation is enabled. + */ + public boolean isValidationVisible() { + return validationVisible; + } + + /** + * Enable or disable automatic, visible validation. + * + * If automatic validation is enabled, any validators connected to this + * component are evaluated while painting the component and potential error + * messages are sent to client. If the automatic validation is turned off, + * isValid() and validate() methods still work, but one must show the + * validation in their own code. + * + * @param validateAutomatically + * True, if automatic validation is enabled. + */ + public void setValidationVisible(boolean validateAutomatically) { + if (validationVisible != validateAutomatically) { + requestRepaint(); + validationVisible = validateAutomatically; + } + } + }
\ No newline at end of file |