gpt4 book ai didi

vaadin - 如何使用包装器验证表中文本字段中的整数

转载 作者:行者123 更新时间:2023-12-04 17:01:02 26 4
gpt4 key购买 nike

我有一个表,我在其中使用 createField() 创建字段。
在编辑模式下,用户可以在字段中输入文本。

此表中的一列应仅允许整数,因此我使用的是 IntegerRangeValidator。

验证应该是动态的(按您输入的方式),如果输入被验证为 false,则应显示一个小的红色感叹号,工具提示应显示类似“仅允许整数!”之类的内容。
为了能够显示这些感叹号并进行这种动态验证,我需要使用一个每 200 毫秒监听一次 textChanges 的包装器。

问题在于 TextField 返回的是一个字符串,因此验证器将所有内容都解释为字符串,即使用户在该字段中输入了一个整数。

在 Vaadin 7 中 - 当在包装器中的重写 textChange 方法中执行验证时,如何从表内的 TextField 验证整数?

createField 方法:

@Override
public Field<?> createField(Container container, Object itemId, Object propertyId, com.vaadin.ui.Component uiContext) {

TextField tField = null;

tField = (TextField) super.createField(container, itemId, propertyId, uiContext);
tField.setBuffered(true);
addFieldListeners(tField);

if (propertyId.equals("age") {
tField.setRequired(true);
tField.setRequiredError("This field is required!");
// tField.setConverter(new StringToIntegerConverter()); <-- I also tried this, without success
tField.addValidator(new IntegerRangeValidator("Only Integers allowed!", 1, 150));
@SuppressWarnings({ "unchecked", "rawtypes" })
TableDataValidatingWrapper<TextField> wField = new TableDataValidatingWrapper(tField);
return wField;
} else {
return null;
}
}

包装器:
public class TableDataValidatingWrapper<T> extends CustomField<T> {

private static final long serialVersionUID = 1L;
protected Field<T> delegate;

public TableDataValidatingWrapper(final Field<T> delegate) {
this.delegate = delegate;

if (delegate instanceof TextField) {
final TextField textField = (TextField) delegate;
textField.setTextChangeEventMode(AbstractTextField.TextChangeEventMode.TIMEOUT);
textField.setTextChangeTimeout(200);

textField.setCaption("");

textField.addTextChangeListener(new FieldEvents.TextChangeListener() {

private static final long serialVersionUID = 1L;

@Override
public void textChange(FieldEvents.TextChangeEvent event) {
try {
textField.setValue(event.getText());
textField.validate();
} catch (EmptyValueException e) {
System.out.println("Caught exception " + e);
} catch (InvalidValueException e) {
System.out.println("Caught exception " + e);
} catch (Exception e) {
System.out.println("Caught unknown exception " + e);
}
}
});
}
}

// ... some other overridden methods
}

最佳答案

您可以向 TextField 添加一个转换器,将字符串转换为整数:

tField.setConverter(new StringToIntegerConverter());
tField.addValidator(new IntegerRangeValidator("Only Integers allowed!", 1, 150));

关于vaadin - 如何使用包装器验证表中文本字段中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19815774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com