仅接受h:inputText值的数字

时间:2013-10-09 10:29:16

标签: validation jsf jsf-2 input decimal

有没有办法确认JSF中h:inputText的值,它只接受数字。意味着它可以是Integerfloat

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

12 个答案:

答案 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 &lt; 48 || event.which &gt; 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)

以下是一些不同的选择:

  • 您可以使用bean validation中的@Digits
  • 您可以使用f:convertNumber
  • 您可以在辅助bean方法中验证输入(您可以轻松找到相关的教程)
  • 如果jsf 2.2和html5是您的选项,您可以使用<input type="number" />
  • 或者您可以使用自己的Javascript验证。

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

答案 5 :(得分:2)

这对我有用

onkeypress="if( (event.which &lt; 48 || event.which &gt; 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)。 pnumpint类型仅允许正输入(无符号)。

答案 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>
  • 对于firefox,这使得信息气泡可以建议用户输入 提交前的有效数字
  • 对于IE,它立即提交,清除输入小部件,重置为 零(如果输入无效),不会给用户提供在客户端校正的机会,但是 确保有效的服务器请求
  • 对于未经测试的铬

如果没有隐含地提供jquery资源,则需要引用jquery资源。素面