--- /dev/null
+package com.itmill.toolkit.tests.tickets;
+
+import com.itmill.toolkit.Application;
+import com.itmill.toolkit.data.Property;
+import com.itmill.toolkit.data.Validator;
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.TextField;
+import com.itmill.toolkit.ui.Window;
+import com.itmill.toolkit.ui.Window.Notification;
+
+public class Ticket2107 extends Application {
+
+ public void init() {
+ final Window w = new Window("Testing for #2107");
+ setMainWindow(w);
+
+ final TextField tf = new TextField(
+ "Required field that validated the input");
+ tf
+ .setDescription("Enter someting and click outside the field to activate");
+ tf.setRequired(true);
+ tf.setImmediate(true);
+ tf.addListener(new Property.ValueChangeListener() {
+
+ public void valueChange(ValueChangeEvent event) {
+ w.showNotification("TextField is " + (tf.isValid() ? "" : "in")
+ + "valid, with error: " + tf.getErrorMessage(),
+ Notification.TYPE_WARNING_MESSAGE);
+ }
+ });
+ tf.addValidator(new Validator() {
+
+ public boolean isValid(Object value) {
+ return value != null && value.toString().length() > 3;
+ }
+
+ public void validate(Object value) throws InvalidValueException {
+ if (!isValid(value)) {
+ throw new InvalidValueException(
+ "Text length must exceed 3 characters");
+ }
+ }
+ });
+ w.addComponent(tf);
+
+ final Button b = new Button(
+ "Field should use error message. (!) should be shown when empty.",
+ false);
+ w.addComponent(b);
+ b.setImmediate(true);
+ b.addListener(new Property.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ tf
+ .setRequiredError(b.booleanValue() ? "Field must not be empty"
+ : null);
+ }
+ });
+ }
+
+}
throw new Property.ReadOnlyException();
}
+ // Repaint is needed even when the client thinks that it knows the
+ // new state if validity of the component may change
+ if (repaintIsNotNeeded && (isRequired() || getValidators() != null)) {
+ repaintIsNotNeeded = false;
+ }
+
// If invalid values are not allowed, the value must be checked
if (!isInvalidAllowed()) {
final Collection v = getValidators();
try {
validate();
} catch (Validator.InvalidValueException e) {
- if (!"".equals(e.getMessage())) {
+ String msg = e.getMessage();
+ if (msg != null && !"".equals(msg)) {
validationError = e;
}
}
requestRepaint();
}
+ /**
+ * Set the error that is show if this field is required, but empty. When
+ * setting requiredMessage to be "" or null, no error pop-up or exclamation
+ * mark is shown for a empty required field. This faults to "". Even in
+ * those cases isValid() returns false for empty required fields.
+ *
+ * @param requiredMessage
+ * Message to be shown when this field is required, but empty.
+ */
public void setRequiredError(String requiredMessage) {
requiredError = requiredMessage;
requestRepaint();