You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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ğ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:37:45