Creating a TextField for integer only input when not using a data source
A TextField
is a component that always has a value of type String
. By adding a converter to a field, the field will automatically validate that the entered value can be converted and it will provide the converted value using the getConvertedValue()
method.
Java
final TextField textField = new TextField("Text field");
textField.setConverter(Integer.class);
Button submitButton = new Button("Submit value", new ClickListener() {
public void buttonClick(ClickEvent event) {
String uiValue = textField.getValue();
try {
Integer convertedValue = (Integer) textField
.getConvertedValue();
Notification.show(
"UI value (String): " + uiValue
+ "<br />Converted value (Integer): "
+ convertedValue);
} catch (ConversionException e) {
Notification.show(
"Could not convert value: " + uiValue);
}
}
});
addComponent(new Label("Text field type: " + textField.getType()));
addComponent(new Label("Converted text field type: "
+ textField.getConverter().getModelType()));
addComponent(textField);
addComponent(submitButton);
With this example, entering a number and pressing the button causes the value of the TextField
to be a String
while the converted value will be an Integer
representing the same value. If e.g. a letter is entered to the field and the button is pressed, the validation will fail. This causes a notice to be displayed for the field and an exception to be thrown from getConvertedValue()
.