如何用pe:sheetColumn限制输入仅1位小数并禁止多小数点
解决方案
针对PrimeFaces Extension 6.2的pe:sheetColumn组件,要实现实时限制输入仅1位小数、禁止多个小数点及超1位小数的需求,无需依赖JavaScript keyup事件或事后转换的numericPattern,可以通过以下方式实现:
核心思路:利用PrimeFaces InputMask配合表格列编辑器
PrimeFaces的p:inputMask组件本身支持实时输入格式限制,可直接嵌入pe:sheetColumn的编辑器中,通过自定义掩码规则实现需求。
具体代码实现
<!-- 确保pe:sheet开启编辑模式 --> <pe:sheet value="#{bean.dataList}" var="item" editable="true"> <!-- 带实时输入限制的数值列 --> <pe:sheetColumn headerText="数值列" property="value"> <pe:sheetColumnEditor> <p:inputMask mask="9999999.9" validChars="0123456789." placeholder="请输入数值" autoClear="false" /> </pe:sheetColumnEditor> </pe:sheetColumn> <!-- 其他列... --> </pe:sheet>
规则说明
mask="9999999.9":定义输入格式,其中:9:允许输入0-9的数字(可根据业务需求调整整数部分的位数,比如999.9限制整数最多3位).:固定的小数点位置,仅允许输入一次,自动阻止多个小数点的输入- 末尾的
9:仅允许输入1位小数,超过1位的数字会被实时拦截
validChars="0123456789.":限制输入的有效字符,避免用户输入非数字/小数点内容autoClear="false":保留用户输入的部分内容(比如输入123时,会显示123.而非清空,提示用户补充小数位)
额外优化(可选)
如果希望用户输入整数时自动补全.0,可以在p:inputMask上添加onblur事件(非keyup,符合需求):
<p:inputMask mask="9999999.9" validChars="0123456789." placeholder="请输入数值" autoClear="false" onblur="if(this.value.endsWith('.')) this.value += '0';" />
该事件仅在输入框失去焦点时触发,不会实时干扰输入过程,同时保证最终值格式符合要求。
内容的提问来源于stack exchange,提问作者Samet Dağ
相关产品推荐
相关产品推荐

