使用带有BigDecimal和逗号分隔符的p:inputNumber

时间:2019-06-24 10:36:00

标签: jsf primefaces

关于我的语言环境设置,我想使用“,”作为分隔符。我的主要问题是,分隔符后面的数字甚至没有到达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。

1 个答案:

答案 0 :(得分:1)

您正以多种方式指定同一方面:converterdecimalSeparatorlanguage,单个converters中的多个component

Primefaces p:inputNumber有一个简单的lang uage属性-您尝试过吗?

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

您也没有在设置器中设置grossMoney字段。取而代之的是您进行netUnitPrice的计算。您最好在动作或(动作/ ajax)监听器中执行此操作。保持吸气剂/设置剂的琐碎。