亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

構造 vaadin 14 文本字段,僅接受數字,不接受其他內容

構造 vaadin 14 文本字段,僅接受數字,不接受其他內容

DIEA 2024-01-25 21:37:35
我需要制作只能接受數字的 vaadin 14 文本字段。文本字段的標準如下1.文本字段只能接受數字,不能接受其他任何內容,因為我想將該文本字段用作手機號碼字段。2.以這樣的方式進行驗證:如果用戶嘗試輸入字母,則文本字段中不得反映任何內容。文本字段中只能輸入數字。3.任何警告或錯誤不得顯示在用戶界面中,因為我們專門為手機號碼制作了文本字段。我嘗試過的事情是活頁夾,但允許在焦點丟失事件之后輸入字母,它們會驗證并提供錯誤消息我不希望出現這種行為。還嘗試了 vaadin 數字字段,但允許字符“e”只是簡單而直接,我正在尋找僅輸入數字的文本字段。如果用戶嘗試輸入字母,則文本字段中不得反映任何內容。
查看完整描述

3 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

服務器端

您可以執行多種選項,

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組件。


查看完整回答
反對 回復 2024-01-25
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

我找到了答案的解決方案我在 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();

    }


}

這實際上解決了我有關手機號碼輸入的問題。


查看完整回答
反對 回復 2024-01-25
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

您可以使用活頁夾在現場進行驗證,例如

binder.forField(textFieldForNumber)
      .withValidator(new RegexpValidator("Only 1-9 allowed","\\d*"))
      .bind(YourEntity::getNo, YourEntity::setNo);


查看完整回答
反對 回復 2024-01-25
  • 3 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號