构造仅接受数字的 vaadin 14 Textfield
Construct vaadin 14 Textfield which accepts only numbers nothing else
我需要制作只能接受 numbers.The 文本字段的 vaadin 14 文本字段,标准如下
1.The 文本字段只能接受数字,因为我想将该文本字段用作手机号码字段。
2.validate 这样,如果用户尝试输入字母,则必须允许在文本字段中输入 textfield.Only 数字中的任何内容。
3.Any警告或错误不能显示在UI中,因为我们专门为手机号码制作文本字段。
我试过的东西是活页夹,但它允许在焦点丢失事件后输入字母表,他们验证并提供错误消息我不想要这种行为。
也试过 vaadin 数字字段,但允许字符 'e'
简单明了我正在寻找仅接受输入的文本字段numbers.If用户尝试输入字母没有任何内容必须反映在文本字段中。
您可以使用像
这样的活页夹在字段上进行验证
binder.forField(textFieldForNumber)
.withValidator(new RegexpValidator("Only 1-9 allowed","\d*"))
.bind(YourEntity::getNo, YourEntity::setNo);
服务器端
您可以做很多选择,第一个是 中已经提到的服务器端验证器:
binder.forField(textFieldForNumber)
.withValidator(new RegexpValidator("Only 1-9 allowed","\d*"))
.bind(YourEntity::getNo, YourEntity::setNo);
客户端
也有可能在客户端使用textField.setPattern(..)方法进行相同的检查和输入过滤,例如:
textFieldForNumber.setPattern("\d*");
此外,可以通过
防止输入与模式完全不匹配
textFieldForNumber.setPreventInvalidInput(true);
备用小部件:NumberField
第三种选择是使用 NumberField 组件。
我找到了答案的解决方案我在 Vaadin 新测试版中提取了整数文本字段的源代码
代码如下
@Tag("vaadin-integer-field")
@HtmlImport("frontend://bower_components/vaadin-text-field/src/vaadin-integer-field.html")
@JsModule("@vaadin/vaadin-text-field/src/vaadin-integer-field.js")
public class BigIntegerField extends AbstractNumberField<BigIntegerField, BigInteger> {
private static final SerializableFunction<String, BigInteger> PARSER = valueFormClient -> {
if (valueFormClient == null || valueFormClient.isEmpty()) {
return null;
}
try {
return new BigInteger(valueFormClient);
} catch (NumberFormatException e) {
return null;
}
};
private static final SerializableFunction<BigInteger, String> FORMATTER = valueFromModel -> valueFromModel == null
? ""
: valueFromModel.toString();
/**
* Constructs an empty {@code IntegerField}.
*/
public BigIntegerField() {
super(PARSER, FORMATTER, Double.MIN_VALUE, Double.MAX_VALUE);
// super(PARSER, FORMATTER, new BigInteger(String.valueOf(Integer.MIN_VALUE)), new BigInteger(String.valueOf(Integer.MAX_VALUE)));
}
/**
* Constructs an empty {@code IntegerField} with the given label.
*
* @param label
* the text to set as the label
*/
public BigIntegerField(String label) {
this();
setLabel(label);
}
/**
* Constructs an empty {@code IntegerField} with the given label and
* placeholder text.
*
* @param label
* the text to set as the label
* @param placeholder
* the placeholder text to set
*/
public BigIntegerField(String label, String placeholder) {
this(label);
setPlaceholder(placeholder);
}
/**
* Constructs an empty {@code IntegerField} with a value change listener.
*
* @param listener
* the value change listener
*
* @see #addValueChangeListener(ValueChangeListener)
*/
public BigIntegerField(
ValueChangeListener<? super ComponentValueChangeEvent<BigIntegerField, BigInteger>> listener) {
this();
addValueChangeListener(listener);
}
/**
* Constructs an empty {@code IntegerField} with a value change listener and
* a label.
*
* @param label
* the text to set as the label
* @param listener
* the value change listener
*
* @see #setLabel(String)
* @see #addValueChangeListener(ValueChangeListener)
*/
public BigIntegerField(String label,
ValueChangeListener<? super ComponentValueChangeEvent<BigIntegerField, BigInteger>> listener) {
this(label);
addValueChangeListener(listener);
}
/**
* Constructs a {@code IntegerField} with a value change listener, a label
* and an initial value.
*
* @param label
* the text to set as the label
* @param initialValue
* the initial value
* @param listener
* the value change listener
*
* @see #setLabel(String)
* @see #setValue(Object)
* @see #addValueChangeListener(ValueChangeListener)
*/
public BigIntegerField(String label, BigInteger initialValue,
ValueChangeListener<? super ComponentValueChangeEvent<BigIntegerField, BigInteger>> listener) {
this(label);
setValue(initialValue);
addValueChangeListener(listener);
}
/**
* Sets the minimum value of the field. Entering a value which is smaller
* than {@code min} invalidates the field.
*
* @param min
* the min value to set
*/
public void setMin(int min) {
super.setMin(min);
}
/**
* Gets the minimum allowed value of the field.
*
* @return the min property of the field
* @see #setMin(int)
*/
public int getMin() {
return (int) getMinDouble();
}
/**
* Sets the maximum value of the field. Entering a value which is greater
* than {@code max} invalidates the field.
*
* @param max
* the max value to set
*/
public void setMax(int max) {
super.setMax(max);
}
/**
* Gets the maximum allowed value of the field.
*
* @return the max property of the field
* @see #setMax(int)
*/
public int getMax() {
return (int) getMaxDouble();
}
/**
* Sets the allowed number intervals of the field. This specifies how much
* the value will be increased/decreased when clicking on the
* {@link #setHasControls(boolean) control buttons}. It is also used to
* invalidate the field, if the value doesn't align with the specified step
* and {@link #setMin(int) min} (if specified by user).
*
* @param step
* the new step to set
* @throws IllegalArgumentException
* if the argument is less or equal to zero.
*/
public void setStep(int step) {
if (step <= 0) {
throw new IllegalArgumentException("The step cannot be less or equal to zero.");
}
super.setStep(step);
}
/**
* Gets the allowed number intervals of the field.
*
* @return the step property of the field
* @see #setStep(int)
*/
public int getStep() {
return (int) getStepDouble();
}
}
这实际上解决了我关于手机号码输入的问题。
我需要制作只能接受 numbers.The 文本字段的 vaadin 14 文本字段,标准如下
1.The 文本字段只能接受数字,因为我想将该文本字段用作手机号码字段。 2.validate 这样,如果用户尝试输入字母,则必须允许在文本字段中输入 textfield.Only 数字中的任何内容。 3.Any警告或错误不能显示在UI中,因为我们专门为手机号码制作文本字段。
我试过的东西是活页夹,但它允许在焦点丢失事件后输入字母表,他们验证并提供错误消息我不想要这种行为。
也试过 vaadin 数字字段,但允许字符 'e'
简单明了我正在寻找仅接受输入的文本字段numbers.If用户尝试输入字母没有任何内容必须反映在文本字段中。
您可以使用像
这样的活页夹在字段上进行验证binder.forField(textFieldForNumber)
.withValidator(new RegexpValidator("Only 1-9 allowed","\d*"))
.bind(YourEntity::getNo, YourEntity::setNo);
服务器端
您可以做很多选择,第一个是
binder.forField(textFieldForNumber)
.withValidator(new RegexpValidator("Only 1-9 allowed","\d*"))
.bind(YourEntity::getNo, YourEntity::setNo);
客户端
也有可能在客户端使用textField.setPattern(..)方法进行相同的检查和输入过滤,例如:
textFieldForNumber.setPattern("\d*");
此外,可以通过
防止输入与模式完全不匹配textFieldForNumber.setPreventInvalidInput(true);
备用小部件:NumberField
第三种选择是使用 NumberField 组件。
我找到了答案的解决方案我在 Vaadin 新测试版中提取了整数文本字段的源代码
代码如下
@Tag("vaadin-integer-field")
@HtmlImport("frontend://bower_components/vaadin-text-field/src/vaadin-integer-field.html")
@JsModule("@vaadin/vaadin-text-field/src/vaadin-integer-field.js")
public class BigIntegerField extends AbstractNumberField<BigIntegerField, BigInteger> {
private static final SerializableFunction<String, BigInteger> PARSER = valueFormClient -> {
if (valueFormClient == null || valueFormClient.isEmpty()) {
return null;
}
try {
return new BigInteger(valueFormClient);
} catch (NumberFormatException e) {
return null;
}
};
private static final SerializableFunction<BigInteger, String> FORMATTER = valueFromModel -> valueFromModel == null
? ""
: valueFromModel.toString();
/**
* Constructs an empty {@code IntegerField}.
*/
public BigIntegerField() {
super(PARSER, FORMATTER, Double.MIN_VALUE, Double.MAX_VALUE);
// super(PARSER, FORMATTER, new BigInteger(String.valueOf(Integer.MIN_VALUE)), new BigInteger(String.valueOf(Integer.MAX_VALUE)));
}
/**
* Constructs an empty {@code IntegerField} with the given label.
*
* @param label
* the text to set as the label
*/
public BigIntegerField(String label) {
this();
setLabel(label);
}
/**
* Constructs an empty {@code IntegerField} with the given label and
* placeholder text.
*
* @param label
* the text to set as the label
* @param placeholder
* the placeholder text to set
*/
public BigIntegerField(String label, String placeholder) {
this(label);
setPlaceholder(placeholder);
}
/**
* Constructs an empty {@code IntegerField} with a value change listener.
*
* @param listener
* the value change listener
*
* @see #addValueChangeListener(ValueChangeListener)
*/
public BigIntegerField(
ValueChangeListener<? super ComponentValueChangeEvent<BigIntegerField, BigInteger>> listener) {
this();
addValueChangeListener(listener);
}
/**
* Constructs an empty {@code IntegerField} with a value change listener and
* a label.
*
* @param label
* the text to set as the label
* @param listener
* the value change listener
*
* @see #setLabel(String)
* @see #addValueChangeListener(ValueChangeListener)
*/
public BigIntegerField(String label,
ValueChangeListener<? super ComponentValueChangeEvent<BigIntegerField, BigInteger>> listener) {
this(label);
addValueChangeListener(listener);
}
/**
* Constructs a {@code IntegerField} with a value change listener, a label
* and an initial value.
*
* @param label
* the text to set as the label
* @param initialValue
* the initial value
* @param listener
* the value change listener
*
* @see #setLabel(String)
* @see #setValue(Object)
* @see #addValueChangeListener(ValueChangeListener)
*/
public BigIntegerField(String label, BigInteger initialValue,
ValueChangeListener<? super ComponentValueChangeEvent<BigIntegerField, BigInteger>> listener) {
this(label);
setValue(initialValue);
addValueChangeListener(listener);
}
/**
* Sets the minimum value of the field. Entering a value which is smaller
* than {@code min} invalidates the field.
*
* @param min
* the min value to set
*/
public void setMin(int min) {
super.setMin(min);
}
/**
* Gets the minimum allowed value of the field.
*
* @return the min property of the field
* @see #setMin(int)
*/
public int getMin() {
return (int) getMinDouble();
}
/**
* Sets the maximum value of the field. Entering a value which is greater
* than {@code max} invalidates the field.
*
* @param max
* the max value to set
*/
public void setMax(int max) {
super.setMax(max);
}
/**
* Gets the maximum allowed value of the field.
*
* @return the max property of the field
* @see #setMax(int)
*/
public int getMax() {
return (int) getMaxDouble();
}
/**
* Sets the allowed number intervals of the field. This specifies how much
* the value will be increased/decreased when clicking on the
* {@link #setHasControls(boolean) control buttons}. It is also used to
* invalidate the field, if the value doesn't align with the specified step
* and {@link #setMin(int) min} (if specified by user).
*
* @param step
* the new step to set
* @throws IllegalArgumentException
* if the argument is less or equal to zero.
*/
public void setStep(int step) {
if (step <= 0) {
throw new IllegalArgumentException("The step cannot be less or equal to zero.");
}
super.setStep(step);
}
/**
* Gets the allowed number intervals of the field.
*
* @return the step property of the field
* @see #setStep(int)
*/
public int getStep() {
return (int) getStepDouble();
}
}
这实际上解决了我关于手机号码输入的问题。