将 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。
您以某种方式以多种方式指定了同一方面:converter
、decimalSeparator
、language
、单个 component
中的多个 converters
。
Primefaces p:inputNumber
有一个简单的 lang
uage 属性 - 你试过了吗?
<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 琐碎。
关于我的语言环境设置,我想使用“,”作为分隔符。我的主要问题是,分隔符后面的数字甚至没有到达 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。
您以某种方式以多种方式指定了同一方面:converter
、decimalSeparator
、language
、单个 component
中的多个 converters
。
Primefaces p:inputNumber
有一个简单的 lang
uage 属性 - 你试过了吗?
<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 琐碎。