Validation 仅接受h:inputText值的数字
有没有一种方法可以确认JSF中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
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 < 48 || event.which > 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”通过了验证(在开始处带有点)。我认为你应该使用'@dmatosdouble 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}" />