有没有办法确认JSF中h:inputText
的值,它只接受数字。意味着它可以是Integer
或float
。
如果我输入12s3a562.675
,a5678s12
,68712haf.563345
或任何其他此类值,则应显示错误。否则它接受并继续。
答案 0 :(得分:19)
只需将输入值绑定到Double
或更好的BigDecimal
属性,而不是String
。
private BigDecimal number; // Double can also, but beware floating-point-gui.de
<h:inputText value="#{bean.number}" />
对于那些会自动启动的类型,JSF有builtin converters。您可以自定义转换器消息,如下所示:
<h:inputText value="#{bean.number}" converterMessage="Please enter digits only." />
答案 1 :(得分:15)
<h:inputText onkeypress="if(event.which < 48 || event.which > 57) return false;"/>
是一种简短的方法。
它优于type="number"
,你甚至无法输入非数字
答案 2 :(得分:9)
如果您将此添加到您的xhtml
的xmlns:PE = “http://primefaces.org/ui/extensions”
并使用inputext表示名为 pe:inputNumber 的Primefaces Extensions数量,它们不仅可以验证您的数字,还可以更加完整。
<pe:inputNumber value="#{beanTest.myValue}" thousandSeparator="" decimalSeparator="." decimalPlaces="0" />
答案 3 :(得分:4)
尝试
<h:inputText value="SomeValue" converter="javax.faces.Double" />
答案 4 :(得分:3)
以下是一些不同的选择:
@Digits
。<input type="number" />
我认为最好的选择是使用 Bean验证, f:convertNumber 或使用 HTML5 ,因为这些是最干净的并且给予你是最不冗余的代码。
答案 5 :(得分:2)
这对我有用
onkeypress="if( (event.which < 48 || event.which > 57) ) return false;"
答案 6 :(得分:1)
您可以使用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]*')/>
它只会让你输入数字。
当您需要验证其他正则表达式时,您可以轻松地将此用途扩展到其他情况。
注意,这仅适用于按键,如果要捕获其他用户事件,请使用正确的标记。
干杯
答案 7 :(得分:0)
您现在就可以使用PrimeFaces Extension来代替它!
https://www.primefaces.org/showcase/ui/input/inputNumber.xhtml
答案 8 :(得分:0)
如果您愿意使用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
类型仅允许正输入(无符号)。
答案 9 :(得分:0)
如果您只是在寻找整数值,则可以使用JSF 2.2 passthrough attributes来使用input type="number"
,如下所示:
<html xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
<h:inputText a:type="number" value="#{bean.integer}" />
答案 10 :(得分:-1)
试试这个
<h:inputText>
<f:validateRegex pattern="\d*(.\d+)?"/>
</h:inputText>
答案 11 :(得分:-1)
html5,跨浏览器和客户端解决方案可能
<script>
//<![CDATA[
$(document).ready(function(){
$("#someinputid\\:withcolon").attr('type', 'number');
});
//]]>
</script>
如果没有隐含地提供jquery资源,则需要引用jquery资源。素面