Принимать только цифры для значения 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 < 48 || event.which > 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" />
вот несколько различных вариантов:
- можно использовать
@Digits
с проверка зернах. - можно использовать f: convertNumber.
- вы можете проверить ввод в методе поддержки bean (вы легко найдете учебники для этого)
- если jsf 2.2 и html5 является вариантом для вас, вы можете использовать
<input type="number" />
- или вы можете использовать свою собственную проверку Javascript.
Я думаю, что лучшие варианты либо с помощью проверка зернах, f: convertNumber или идешь с в HTML5 поскольку они самые чистые и дают вам наименее избыточный код.
вы можете использовать проверку 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]*')/>
и это позволит вам вводить только цифры.
Вы можете легко расширить это использование на другой случай, когда вам нужно проверить другое регулярное выражение.
Примечание, это работает только с нажатием клавиши, если вы хотите захватить другое пользовательское событие, используйте правильная бирка.
Ура
html5, кросс-браузер и клиентское решение могут быть
<script>
//<![CDATA[
$(document).ready(function(){
$("#someinputid\:withcolon").attr('type', 'number');
});
//]]>
</script>
- для firefox это позволяет пузырькам информации советовать пользователю вводить действительные номера перед отправкой
- для IE он немедленно отправляет, очищает виджет ввода, сбрасывает ноль (если ввод недопустим), не дает пользователю возможности исправить на стороне клиента, но обеспечивает допустимый запрос сервера
- для chrome не протестирован
вам нужно ссылаться на jquery ресурс, если он неявно доступен, например, prime faces