19

有没有办法确认h:inputTextJSF 中的值,它应该只接受数字。表示它可以是 anIntegerfloat.

如果我键入 12s3a562.675 , 或任何其他此类值,则它应该显示错误a5678s1268712haf.563345否则它接受并继续。

4

11 回答 11

23

<h:inputText onkeypress="if(event.which &lt; 48 || event.which &gt; 57) return false;"/>如果您只想接受整数,这是一种捷径。

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

于 2014-06-02T11:33:53.180 回答
22

只需将输入值绑定到一个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." />
于 2015-04-30T09:02:21.200 回答
13

如果你把它添加到你的 xhtml

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

并将 inputext 用于称为pe:inputNumber的 Primefaces Extensions 的数字 ,它不仅可以验证您的数字,还可以验证小数,可能更完整。

<pe:inputNumber value="#{beanTest.myValue}" thousandSeparator="" decimalSeparator="." decimalPlaces="0" />
于 2015-10-13T19:52:57.357 回答
7

如果您愿意使用 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>

这将阻止键盘输入以允许有效的整数 ( int/ pint) 或小数 ( num/ pnum) 输入。pnumand类型只允许正pint输入(无符号)。

于 2019-06-03T19:46:35.180 回答
6

尝试

<h:inputText value="SomeValue" converter="javax.faces.Double" />
于 2013-10-18T21:45:01.517 回答
6

这对我有用

onkeypress="if( (event.which &lt; 48 || event.which &gt; 57) ) return false;"
于 2016-05-05T19:50:54.683 回答
4

以下是一些不同的选项:

  • 您可以使用@Digitsfrom bean 验证
  • 您可以使用f:convertNumber
  • 您可以在支持 bean 方法中验证输入(您会很容易找到这方面的教程)
  • 如果您可以选择 jsf 2.2 和 html5,您可以使用<input type="number" />
  • 或者您可以使用自己的 Javascript 验证。

我认为最好的选择是使用Bean 验证f:convertNumber或使用HTML5,因为这些是最干净的,并且给你的冗余代码最少。

于 2013-10-09T10:39:07.567 回答
2

您可以使用 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]*')/>

它只会让你输入数字。

当您需要验证其他正则表达式时,您可以轻松将此用途扩展到其他情况。

请注意,这仅适用于按键,如果您想捕获其他用户事件,请使用正确的标签。

干杯

于 2013-10-09T10:36:28.240 回答
0

如果您只是在寻找整数值,则可以使用 JSF 2.2直通属性来使用如下输入type="number"

<html xmlns:a="http://xmlns.jcp.org/jsf/passthrough">

<h:inputText a:type="number" value="#{bean.integer}" />
于 2020-06-14T09:53:44.810 回答
0

您现在可以使用 PrimeFaces Extension 而不是!

https://www.primefaces.org/showcase/ui/input/inputNumber.xhtml

于 2018-12-16T04:45:57.820 回答
-1

尝试这个

<h:inputText>
   <f:validateRegex pattern="\d*(.\d+)?"/>
</h:inputText>
于 2015-04-30T04:45:54.603 回答