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

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

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

9 ответов


просто привяжите входное значение к 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." />

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

Он имеет преимущество перед type="number" что вы даже не можете ввести не-цифру


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

xmlns:pe="http://primefaces.org/ui/extensions"

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

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

попробовать

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

вот несколько различных вариантов:

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

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


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

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

вы можете использовать проверку 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: input захватите событие onKeyPress и вызовите функцию

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

и это позволит вам вводить только цифры.

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

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

Ура


попробуй такое

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

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

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

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