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

如何使p:inputNumber支持键盘输入?解决h:inputText光标定位异常问题

问题解决方案

一、解决p:inputNumber无法手动键盘输入的问题

PrimeFaces的p:inputNumber组件默认仅允许通过增减按钮调整数值,禁用了手动输入。只需添加allowManualInput="true"属性即可开启键盘输入功能,同时保留小数处理能力。另外建议移除style中的direction: rtl,避免输入方向冲突影响体验。

修改后的代码:

<div class="col-12 md:col-6 lg:col-6 xl:col-4">
    <div class="field">
        <span class="ui-float-label label-button">
            <p:inputNumber id="porcentajesolarAgr" required="true" 
                requiredMessage="#{msg['subpropiedad_debe_ingresar_porcentaje_aval']}"
                symbolPosition="s" decimalSeparator="." thousandSeparator="" 
                value="#{subPropiedadBean.subpropiedad.porcentajeSolarStp}" 
                style="text-align: right;" 
                mode="decimal" 
                allowManualInput="true"/>
            <p:outputLabel for="porcentajesolarAgr">#{msg['subpropiedad_procentaje_aval']}</p:outputLabel>
            <p:message for="porcentajesolarAgr"/>
        </span>
    </div>
</div>

二、解决h:inputText光标默认定位在小数点位置的问题

光标异常是因为设置了direction: rtl(从右往左输入方向),导致初始光标落在小数点区域。提供两种解决方式:

方案1:移除direction:rtl(推荐)

仅保留text-align: right实现文本右对齐,输入方向保持默认的从左到右,光标会自动定位在数字开头。

修改后的代码:

<div class="col-12 md:col-6 lg:col-6 xl:col-4">
    <div class="field">
        <span class="ui-float-label label-button">
            <h:inputText id="porcentajeAgr" required="true" requiredMessage="#{msg['propiedades_debe_ingresar_aval_sib']}"
            value="#{subPropiedadBean.subpropiedad.porcentajeAvalaSibStp}"
            converterMessage="#{msg['propiedades_formato_invalido']}"
            style="text-align: right;">
            <f:convertNumber type="number" pattern="#,##0.00" />
          </h:inputText>
          <h:outputLabel for="porcentajeAgr">#{msg['subpropiedad_procentaje_aval']}</h:outputLabel>
          <h:message for="porcentajeAgr" />
        </span>
    </div>                                             
</div> 

方案2:保留direction:rtl并通过JS控制光标

如果必须保留direction: rtl,可以通过onfocus事件手动将光标定位到文本开头:

<div class="col-12 md:col-6 lg:col-6 xl:col-4">
    <div class="field">
        <span class="ui-float-label label-button">
            <h:inputText id="porcentajeAgr" required="true" requiredMessage="#{msg['propiedades_debe_ingresar_aval_sib']}"
            value="#{subPropiedadBean.subpropiedad.porcentajeAvalaSibStp}"
            converterMessage="#{msg['propiedades_formato_invalido']}"
            style="text-align: right; direction: rtl;"
            onfocus="if(this.value.length > 0) this.setSelectionRange(0, 0);">
            <f:convertNumber type="number" pattern="#,##0.00" />
          </h:inputText>
          <h:outputLabel for="porcentajeAgr">#{msg['subpropiedad_procentaje_aval']}</h:outputLabel>
          <h:message for="porcentajeAgr" />
        </span>
    </div>                                             
</div> 

内容的提问来源于stack exchange,提问作者user18043163

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:54