首页 > 解决方案 > 将 p:inputNumber 与 BigDecimal 和逗号分隔符一起使用

问题描述

关于我的语言环境设置,我想使用“,”作为分隔符。我的主要问题是,分隔符之后的数字甚至没有到达 bean 本身。

我已经尝试添加 decimalSeparator="," 并添加到但没有任何改变......

这个 cellEditor 包括编辑器和输出:

<p:cellEditor>
                <f:facet name="output">
                    <h:outputText id="grossMoney" value="#{item.grossMoney}">
                        <f:convertNumber locale="hu"/>
                        <f:convertNumber maxFractionDigits="2" minFractionDigits="0"/>
                    </h:outputText>                        
                </f:facet>
                <f:facet name="input">                         
                    <p:inputNumber id="grossMoneyEdit" decimalSeparator="," value="#{item.grossMoney}" >
                        <f:convertNumber locale="hu"/>
                        <!-- <f:convertNumber maxFractionDigits="2" minFractionDigits="0"/> -->                        

                    </p:inputNumber>
                </f:facet>
</p:cellEditor>

这是 bean 方法,其中 setter 没有正确获取值:

public void setGrossMoney(BigDecimal grossMoney) {
    if (grossMoney != null && grossMoney != BigDecimal.ZERO) {

        if (vatRate == 0) {
            netUnitPrice = grossMoney;
        } else {
            netUnitPrice = grossMoney.divide(BigDecimal.ONE.add(BigDecimal.valueOf(vatRate).divide(BigDecimal.valueOf(100L))), 3, RoundingMode.HALF_UP);
        }

    } else {
        netUnitPrice = BigDecimal.ZERO;
    }
}

预期结果很简单:如果我输入 100,5,它应该被转换为 BigDecimal 并使用正确的值进行计算,并且在输出端它也应该显示为 100,5。

标签: jsfprimefaces

解决方案


您以多种方式以某种方式指定相同的方面:converter, decimalSeparator, language, multiple convertersin a single component.

Primefacesp:inputNumber有一个简单的language 属性——你试过吗?

<p:inputNumber value="#{myBean.decimalVal}" lang="hu"/>
<h:outputText value="#{myBean.decimalVal}">
   <f:convertNumber locale="hu" />
</h:outputText>

您也没有grossMoney在设置器中设置字段。相反,您计算netUnitPrice. 你最好在一个动作或(动作/ajax)监听器中做到这一点。保持 getter/setter 微不足道。


推荐阅读