Accessing text in the GWT TextBox from ChangeEvent

248 views Asked by At

I'm dynamically generating a form based on data received from an RPC call into a FormFieldData object which has details about the field to be rendered such as, Field Name, expected length and type of input, if the field is a required field or not and valid input Regex in some cases etc.

I'd like to be able to perform validation on the field depending on above attributes. Here's an example:

private void renderTextField(FormFieldData field){
    FormGroup formGroup = new FormGroup();
    FormLabel formLabel = new FormLabel();
    if(field.isRequired()){
        formLabel.setText(field.getName()+"*");
    }else{
        formLabel.setText(field.getName());
    }
    formGroup.add(formLabel);

    TextBox textBox = new TextBox();
    textBox.addChangeHandler(new ChangeHandler(){
        @Overrride
        public void onChange(ChangeEvent event){
            //TODO - find a way to get the text entered in TextBox
            // and perform validation on it
            //and set the TextBox Style to "Validation-error"
        }
    });
    formGroup.add(textBox);

    form.add(formGroup);
}

There're similar methods to render dropdowns, Numeric fields, radio button fields etc. which would need similar validation.

The problem is I can't access the text from the TextBox inside the onChange method without declaring it final, which I can't do because I might be rendering multiple text fields. I don't know much about ChangeEvent and if there's a way to get the text from the that.

I'd really appreciate any pointers to a way to do this in real time as the data is entered into the form, other than having to iterate through the fields and their corresponding FormFieldData object when the form is submitted.

1

There are 1 answers

1
Baz On BEST ANSWER

First off, you can make the variable final, no problem.

If you don't want to do that for whatever reason, you can get the TextBox from the event like this:

textBox.addValueChangeHandler(new ValueChangeHandler(){
    @Overrride
    public void onValueChange(ChangeEvent event){
        TextBox box = (TextBox) event.getSource();
        // Do whatever you need to here
    }
});

You are probably also looking for ValueChangeHandler instead of ChangeHandler.