Принимать только цифры для h: значение inputText

Есть ли способ подтвердить значение h:inputText в JSF, которое должно принимать только цифры. Значит, это может быть Integer или float.

Если я набираю 12s3a562.675, a5678s12, 68712haf.563345 или любой другой такой тип значений, тогда он должен показывать ошибку. В противном случае он принимает и продолжает.

Ответ 1

Просто привяжите входное значение к свойству Double или лучше, BigDecimal вместо String.

private BigDecimal number; // Double can also, but beware floating-point-gui.de
<h:inputText value="#{bean.number}" />

JSF имеет встроенные преобразователи для тех типов, которые будут автоматически включаться. Вы можете настроить сообщение конвертера, как показано ниже:

<h:inputText value="#{bean.number}" converterMessage="Please enter digits only." />

Ответ 2

<h:inputText onkeypress="if(event.which &lt; 48 || event.which &gt; 57) return false;"/> - это короткий путь, если вы хотите принимать только целые числа.

Преимущество над type="number" состоит в том, что вы даже не можете ввести незначный

Ответ 3

Если вы добавите это в свой xhtml

XMLNS: ре = "http://primefaces.org/ui/extensions"

и используйте inputext для чисел Primefaces Extensions, называемых pe: inputNumber, которые также не только подтверждают ваши цифры, но и десятичные знаки.

<pe:inputNumber value="#{beanTest.myValue}" thousandSeparator="" decimalSeparator="." decimalPlaces="0" />

Ответ 4

Try

<h:inputText value="SomeValue" converter="javax.faces.Double" />

Ответ 5

Вот несколько вариантов:

  • Вы можете использовать @Digits из bean валидация.
  • Вы можете использовать f: convertNumber.
  • Вы можете проверить ввод в методе поддержки bean (вы легко найдете для этого учебники)
  • Если jsf 2.2 и html5 являются для вас вариантом, вы можете использовать <input type="number" />
  • Или вы можете использовать свою собственную проверку Javascript.

Я думаю, что лучшие варианты либо используют bean валидация, f: convertNumber, либо идут с HTML5, так как это самые чистые и предоставить вам наименее избыточный код.

Ответ 6

Это работает для меня

onkeypress="if( (event.which &lt; 48 || event.which &gt; 57) ) return false;"

Ответ 7

Вы можете использовать проверку JS

Сначала вам нужно определить функцию JS для проверки ввода

function validateInput(regexString) {
    var theEvent = window.event || event;
    var key = theEvent.keyCode || theEvent.which;
    if (key >= 46) {
        key = String.fromCharCode(key);
        var regex = new RegExp("^" + regexString + "$");
        if (!regex.test(key)) {
            theEvent.returnValue = false;
            if (theEvent.preventDefault) {
                theEvent.preventDefault();
            }
        }
    }
}

Во-вторых, в вашем входе h: захватите событие onKeyPress и вызовите функцию

<h:inputText value="..." onKeyPress="validateInput('[0-9]*')/>

И он позволит вам вводить числа.

Вы можете легко расширить это использование в другом случае, когда вам нужно проверить whit other regex.

Обратите внимание, что это работает только с нажатием клавиши, если вы хотите захватить другое пользовательское событие, используйте соответствующий тег.

Приветствия

Ответ 9

Если вы хотите использовать Primefaces, вы можете прикрепить <p:keyFilter> к <h:inputText> или <p:inputText>.

Пример:

<h:inputText id="text1" value="#{bean.intValue}" />
<p:keyFilter for="text1" mask="pint" />

<p:inputText id="text2" value="#{bean.numberValue}" >
  <p:keyFilter mask="num" />
</p:inputText>

Это заблокирует ввод с клавиатуры, чтобы разрешить ввод только действительного целого (int/pint) или десятичного (num/pnum). pnum и pint допускают только положительный ввод (без знака).

Ответ 10

Попробуйте это

<h:inputText>
   <f:validateRegex pattern="\d*(.\d+)?"/>
</h:inputText>

Ответ 11

Решение html5, кросс-браузер и клиентская сторона может быть

<script>
  //<![CDATA[   
  $(document).ready(function(){
    $("#someinputid\\:withcolon").attr('type', 'number');
  });
  //]]>
</script>
  • Для firefox это позволяет информационным пузырям советовать пользователю вводить действительные номера перед отправкой
  • Для IE он отправляет немедленно, очищает входной виджет, сбрасывается до ноль (если вход недействителен), не дает пользователю возможности исправить на стороне клиента, но обеспечивает действительный запрос сервера
  • Для хром не проверен

вам нужно ссылаться на ресурс jquery, если он неявно доступен, например. простые грани