jsf - 将 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。
解决方案
您以多种方式以某种方式指定相同的方面:converter
, decimalSeparator
, language
, multiple converters
in a single component
.
Primefacesp:inputNumber
有一个简单的lang
uage 属性——你试过吗?
<p:inputNumber value="#{myBean.decimalVal}" lang="hu"/>
<h:outputText value="#{myBean.decimalVal}">
<f:convertNumber locale="hu" />
</h:outputText>
您也没有grossMoney
在设置器中设置字段。相反,您计算netUnitPrice
. 你最好在一个动作或(动作/ajax)监听器中做到这一点。保持 getter/setter 微不足道。
推荐阅读
- python - 有没有办法停止为 PyQt ListView 发出信号?
- javascript - React:我如何(动态?)从数据生成页面?
- nsis - 使用 NSIS 安装程序在 ini 文件中写入俄语符号
- github-actions - 当 GitHub Actions 上发生新推送时如何取消现有运行,但仅适用于 PR?
- c# - 即使已插入数据,多对多 ICollection 仍为空
- c++ - 'auto' 可以用作 C++ 中 lambda 参数的子类型吗?
- c++ - 二维数组中的分段错误
- python - 查找 2 个数据帧之间的差异
- javascript - 是否可以使用 peer.send() 发送流畅的音频?
- ios - 传入数据 MVVM RxSwift