P:输入文本格式数字,如'999,999'
p:inputtext format number like '999,999'
在我的XHTML页面中,我有一些inputText字段,用户可以在其中以"999,999"的格式插入数值(最多三个整数值,最多三个十进制值)。小数分隔符是",",因为我想使用意大利语区域设置格式化上述字段。
实际上这是我的p:inputText组件:
<p:inputText value="#{r.value}" id="verog_#{r.id}"
onkeypress="return isNumberKey(event)" />
isNumberKey() javascript函数只允许使用字符(数字和逗号):
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode == 44) return true;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
但是我无法控制允许的最大位数,因此用户可以,例如,输入像"1234,5678"这样的数字,或者更糟糕的是,"12,34"。
我需要在客户端检查这些值,因为它们在一个对话框中。实际上,我在服务器端进行检查,在点击"保存"按钮后:
<p:commandButton value="save" action="#{myBean.saveAction}" ajax="true"
update=":growl" oncomplete="dialogVar.hide()">
<f:param name="action" value="#{action}" />
</p:commandButton>
但是如果我有一个输入错误,对话框总是隐藏的,用户被迫再次提交值。
我不能使用f:convertNumber,因为数据保存在数据库上的字符串,而不是数字。
我也尝试使用p:inputMask组件,但我不能使它正常工作(可能是缺乏知识):掩码"999?,999"不符合我的要求。
也许我可以使用转换器(p:inputText组件具有"converter"answers"converterMessage"属性),但我的转换器尝试也失败了:
NumberFormat nf = NumberFormat.getNumberInstance(Locale.ITALIAN);
nf.setMaximumIntegerDigits(3);
nf.setMaximumFractionDigits(3);
String result = nf.format(submittedValue);
它总是给我IllegalArgumentException,即使submittedValue是0。
我怎样才能达到我的目标?
您需要在客户端测试整个值。
我做了一个例子JS验证:http://jsfiddle.net/lechlukasz/w8K8j/1/
在blur上调用验证函数:
function valid(val) {
var reg = new RegExp('^[0-9]{1,3}(,[0-9]{1,3})?$');
if (!reg.test(val))
return false;
return true;
}
如果您想在按下键时进行完全验证,不要忘记允许逗号作为最后一个字符(在最后字符串中是非法的,但在键入:)时是必要的)
- 是否可以在数字输入框中的小按钮中添加事件侦听器
- 用于数字输入的正则表达式
- AngularJs:在数字输入字段中设置验证的条件最小值和最大值
- 敲除:如何对两个数字输入进行双向绑定
- 在数字输入上按回车键时提交
- 如何显示正好 2 位数字的 html 数字输入的输入值
- 如何使用鼠标或触摸更改数字输入字段
- 为数字输入添加特殊字符
- 在一些Android设备/Chrome上,HTML5数字输入中没有小数点
- 仅HTML输入除^之外的数字输入
- 如何处理 jQuery 中的数字输入更改
- 使用 js 禁用文本输入中的数字输入
- 角度JS数字输入和默认值
- 如何根据数字输入的总和限制数字输入
- 如何更改数字输入的格式
- 从给定的最大数字中减去并输出数字输入值
- 如何使此数字输入接受逗号
- 如何将加号和减号附加到数字输入和更新值
- 在我更改数字输入时获取要更改的范围的内容
- 多个数字输入,jquery .each 如果 val() 大于,则将类添加到元素