我正在动态生成一个表单,基于从RPC调用接收到的FormFieldData对象的数据,该对象具有要呈现的字段的详细信息,例如,字段名称,预期长度和输入类型,如果字段是必需的字段或不是,在某些情况下有效的输入正则表达式等。
我希望能够根据上述属性对字段执行验证。下面是一个例子:
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);
}
也有类似的方法来渲染下拉框、数字字段、单选按钮字段等,这些都需要类似的验证。
问题是我不能访问文本框内的onChange方法没有声明它final的文本,我不能这样做,因为我可能会呈现多个文本字段。我对ChangeEvent不太了解也不知道是否有办法从中获取文本
当数据输入到表单中时,我真的很感激任何指向实时做到这一点的方法,而不是在提交表单时迭代字段及其相应的FormFieldData对象。
首先,您可以创建变量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
。