2015-08-17 3 views
0

Я динамически генерирую форму, основанную на данных, полученных от вызова RPC, в объект FormFieldData, который содержит информацию о поле, которое будет отображаться, например, Имя поля, ожидаемая длина и тип ввод, если поле является обязательным полем или нет, и допустимый ввод Regex в некоторых случаях и т. д.Доступ к тексту в текстовом поле GWT из ChangeEvent

Я хотел бы иметь возможность выполнять проверку в поле в зависимости от вышеуказанных атрибутов. Вот пример:

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); 
} 

Там вы подобные методы визуализации выпадающие, числовые поля, поля радио кнопки и т.д., которые должны были бы подобную проверку.

Проблема заключается в том, что я не могу получить доступ к тексту из TextBox внутри метода onChange, не объявив его final, чего я не могу сделать, потому что я могу отображать несколько текстовых полей. Я мало знаю об ChangeEvent и если есть способ получить текст из этого.

Я очень благодарен за любые указатели на способ сделать это в режиме реального времени, так как данные вводятся в форму, за исключением необходимости перебирать поля и их соответствующий объект FormFieldData при отправке формы.

ответ

1

Во-первых, вы можете сделать переменную final, без проблем.

Если вы не хотите, чтобы сделать это по какой-либо причине, вы можете получить TextBox от события, как это:

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

Вы, вероятно, также ищут ValueChangeHandler вместо ChangeHandler.

+0

Работает отлично, спасибо большое! – Rohit

Смежные вопросы