将 p:inputNumber 与 BigDecimal 和逗号分隔符一起使用

Using p:inputNumber with BigDecimal and comma separator

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

您以某种方式以多种方式指定了同一方面:converterdecimalSeparatorlanguage、单个 component 中的多个 converters

Primefaces p:inputNumber 有一个简单的 language 属性 - 你试过了吗?

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

您也没有在 setter 中设置 grossMoney 字段。相反,你计算 netUnitPrice。您最好在操作或 (action/ajax) 侦听器中执行此操作。保持 getters/setters 琐碎。