仅接受h:inputText值的数字

abh*_*bhi 12 validation jsf input decimal jsf-2

有没有办法确认h:inputTextJSF中的值,它只接受数字.意味着它可以是一个Integer或者一个float.

如果键入 12s3a562.675 , a5678s12 , 68712haf.563345 或任何其他这样的一种价值观,那么它应该显示错误.否则它接受并继续.

Bal*_*usC 19

只需将输入值绑定到一个Double或更好的BigDecimal属性而不是String.

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

JSF 为那些将自动启动的类型构建了内置转换器.您可以自定义转换器消息,如下所示:

<h:inputText value="#{bean.number}" converterMessage="Please enter digits only." />
Run Code Online (Sandbox Code Playgroud)


das*_*ort 17

<h:inputText onkeypress="if(event.which &lt; 48 || event.which &gt; 57) return false;"/> 如果你只想接受整数,这是一个很短的方法.

它的优势type="number"在于你甚至无法输入非数字


die*_*eke 10

如果你把它添加到你的xhtml

的xmlns:PE = "http://primefaces.org/ui/extensions"

并使用inputext表示名为pe:inputNumber的Primefaces Extensions 数量 ,它们不仅可验证您的数字,而且还可以更完整.

<pe:inputNumber value="#{beanTest.myValue}" thousandSeparator="" decimalSeparator="." decimalPlaces="0" />
Run Code Online (Sandbox Code Playgroud)


Dan*_*mar 6

这对我有用

onkeypress="if( (event.which &lt; 48 || event.which &gt; 57) ) return false;"
Run Code Online (Sandbox Code Playgroud)


Vas*_*ach 5

尝试

<h:inputText value="SomeValue" converter="javax.faces.Double" />
Run Code Online (Sandbox Code Playgroud)


YoY*_*oYo 5

如果您愿意使用 Primefaces,您可以将 a 附加<p:keyFilter>到 a<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>
Run Code Online (Sandbox Code Playgroud)

这将阻止键盘输入以允许有效的整数 ( int/ pint) 或小数 ( num/ pnum) 输入。该pnumpint类型只允许正输入(无需登录)。