我正在基于从RPC调用接收的数据动态生成表单到FormFieldData对象,该对象包含有关要呈现的字段的详细信息,如字段名称,预期长度和输入类型(如果该字段是必需的)字段与否以及有效输入Regex在某些情况下等。
我希望能够根据上述属性对字段进行验证。 这是一个例子:
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方法中访问TextBox中的文本,而没有声明 final ,这是我无法做到的,因为我可能会渲染多个文本字段。我对ChangeEvent知之甚少,如果有办法从中获取文本。
我非常感谢任何指向实时执行此操作的方法,因为数据已输入到表单中,而不是在提交表单时必须遍历字段及其对应的FormFieldData对象。
答案 0 :(得分: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
。