Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 仅接受h:inputText值的数字_Validation_Jsf_Jsf 2_Input_Decimal - Fatal编程技术网

Validation 仅接受h:inputText值的数字

Validation 仅接受h:inputText值的数字,validation,jsf,jsf-2,input,decimal,Validation,Jsf,Jsf 2,Input,Decimal,有没有一种方法可以确认JSF中h:inputText的值,它应该只接受数字。表示它可以是整数或浮点 如果我键入12s3a562.675、a5678s12、68712haf.563345或任何其他此类值,则应显示错误。否则它将接受并继续执行。您可以使用JS验证 首先,您需要定义一个JS函数来验证输入 function validateInput(regexString) { var theEvent = window.event || event; var key = theEve

有没有一种方法可以确认JSF中
h:inputText
的值,它应该只接受数字。表示它可以是
整数
浮点


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

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

以下是一些不同的选项:

  • 您可以从中使用
    @数字
  • 你可以用
  • 您可以在backingbean方法中验证输入(您可以很容易地找到相关的教程)
  • 如果您可以选择JSF2.2和html5,那么可以使用
  • 也可以使用自己的Javascript验证
我认为最好的选择是使用Bean验证f:convertNumber或者使用HTML5,因为它们是最干净的,给你的冗余代码最少。

试试看

<h:inputText value="SomeValue" converter="javax.faces.Double" />

如果您只想接受整数,这是一个很短的方法

type=“number”
相比,它的优点是您甚至不能输入非数字

<h:inputText>
   <f:validateRegex pattern="\d*(.\d+)?"/>
</h:inputText>

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

private BigDecimal number; // Double can also, but beware floating-point-gui.de

JSF为那些将自动启动的类型提供了支持。您可以按如下方式自定义转换器消息:

<h:inputText value="#{bean.number}" converterMessage="Please enter digits only." />

如果将其添加到xhtml中

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

将InputText用于素数的扩展名为pe:inputNumber,它不仅验证数字,而且验证小数,可能更完整

<pe:inputNumber value="#{beanTest.myValue}" thousandSeparator="" decimalSeparator="." decimalPlaces="0" />

这对我有用

onkeypress="if( (event.which &lt; 48 || event.which &gt; 57) ) return false;"

代替PrimeFaces扩展,您现在可以使用


如果您愿意使用Primefaces,可以将
附加到

例如:

<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
类型只允许正输入(无符号)。

如果您只是查找整数值,可以使用JSF 2.2来如下使用:

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

<h:inputText a:type="number" value="#{bean.integer}" />


谢谢您的回答。但因为我有将近30-40个输入字段,所以bean验证不是一个好方法。然后我用pattern/type/digitsOnly尝试了f:convertNumber,但没有抛出错误。那么,您是否建议使用其他简单的方法来检查它。f:convertNumber将接受以数字开头的输入,并尝试猜测它应该是什么数字,这样12f将变成12。它不接受以非数字字符开头的输入。为什么bean验证不起作用?您只需要为支持bean中与您的一个输入对应的每个字段放置一个注释。甚至比f:convertNumber少一点代码。另外,
@数字
要求输入仅为数字。谢谢您的回答。但正如我所写的,我有30-40个输入,输入值一直到12位(6.6),所以使用按键调用javascript代码一千次不是个好主意。你建议其他方法吗?@abhi这个JS对用户输入有反应,用户不可能同时输入一千个数字。请更好地解释你的问题。干杯斯洛特:再加上我这边的一杯。我应该怎么做才能只允许数字和输入key@ShirgillAnsari类似这样:
onkeypress=“if(event.which 48 | | event.which 57)返回false;else if(event.which==13)myFunction()”
但我还是更喜欢将所有内容放在一个单独的函数上。禁用JavaScript不会绕过此验证吗?@christopheis,然而,正如BalusC所说,JSF为这些类型提供了内置的转换器,这些转换器将自动启动。[/q]这一条是错误的,因为“.123”通过了验证(在开始处带有点)。我认为你应该使用'@dmatos
double a=.123
在Java中100%有效(为了测试它,请在Java代码中复制这一行)。Double是标准的JSF转换器,它涵盖了JavaDouble。无法使它与JSF1一起工作。Tag Library支持命名空间:,但没有为name:validateRegexI定义标记。validateRegexI有一个浮点变量,JSF抛出此错误:java.lang.ClassCastException-java.lang.float无法转换为java.lang.StringI我试图将扩展库添加到我的项目中并使用InputNumber,但配置不正确。所以,请分享如何配置使用扩展组件和primefaces组件。我目前正在我的项目中使用primefaces 5.2。这是primefaces的一部分。看见
<html xmlns:a="http://xmlns.jcp.org/jsf/passthrough">

<h:inputText a:type="number" value="#{bean.integer}" />