Принимать только цифры для 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 < 48 || event.which > 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 < 48 || event.which > 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.
Обратите внимание, что это работает только с нажатием клавиши, если вы хотите захватить другое пользовательское событие, используйте соответствующий тег.
Приветствия
Ответ 8
Вместо PrimeFaces Extension вы можете использовать сейчас!
https://www.primefaces.org/showcase/ui/input/inputNumber.xhtml
Ответ 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, если он неявно доступен, например. простые грани