java - Primefaces 的 InputNumber 上具有自定义类型的 NumberFormatException
问题描述
我使用PrimeFaces在 JSF 项目上创建了一种自定义类型。我会将此类型与PrimeFaces 的 inputNumber一起使用,但出现错误:
NumberFormatException 类 java.lang.NumberFormatException java.lang.NumberFormatException 在 java.math.BigDecimal.(BigDecimal.java:550) 在 java.math.BigDecimal.(BigDecimal.java:383) 在 java.math.BigDecimal.(BigDecimal. java:806) at org.primefaces.component.inputnumber.InputNumberRenderer.formatForPlugin(InputNumberRenderer.java:292) at org.primefaces.component.inputnumber.InputNumberRenderer.encodeScript(InputNumberRenderer.java:231) at org.primefaces.component.inputnumber .InputNumberRenderer.encodeEnd(InputNumberRenderer.java:124)
简而言之,我创建了一个MyCurrency
存储 adouble
和 extends的ValueExpression
类,如下所示:
public final class MyCurrency extends ValueExpression implements Comparable<MyCurrency>, Serializable {
private Double value;
private MyCurrency(final Double value) {
this.value = value;
}
public Double getValue() {
return this.value;
}
public Long longValue() {
return value.longValue();
}
@Override
public int compareTo(final MyCurrency o) {
return this.getValue().compareTo(o.getValue());
}
@Override
public Object getValue(final ELContext context) {
return new BigDecimal(this.value);
}
@Override
public void setValue(final ELContext context, final Object value) {
this.value = new Builder().withValue(value).build().value;
}
public static class Builder {
private Double value;
public Builder withValue(final Double value) {
this.value = value;
return this;
}
public Builder withValue(final Long value) {
this.value = new Double(value);
return this;
}
public Builder withValue(final Object value) {
this.value = Double.parseDouble(value.toString());
return this;
}
public MyCurrency build() {
return new MyCurrency(this.value);
}
}
}
在我的 bean 中,我有一个 type 的属性MyCurrency
。
当我将它与 inputNumber 一起使用时:
<p:inputNumber id="importoDa" value="#{myBean.myAmount}" />
我得到错误[NumberFormatException]
。
请问有什么帮助吗?
解决方案
不确定这是否是您所要求的解决方案,但似乎您正在尝试将您的输入格式化inputNumber
为货币并将其值与另一个对象进行比较。double
仅在 bean 中存储orBigDecimal
值并将其在视图中格式化为货币可能更容易。您可以通过以下方式使用标签的symbol
anddecimalPlaces
属性实现此目的:<p:inputNumber>
<p:inputNumber id="importoDa" value="#{myBean.myAmount}" symbol="$" decimalPlaces="2" />
希望能帮助到你 :)
推荐阅读
- git - 为什么我会致命:文件在 Jenkins 的存储库之外
- c# - C#如何对两个具有通用类型的类使用一种方法?
- hyperledger-fabric - Hyperledger Fabric - Configtxlator - 解码区块链数据
- c# - C#:我们应用程序:在哪里存储生成的PDF文件?
- java - 我可以在同一个实例中同时启动 IOS、Android 和浏览器吗
- laravel - 我上传了一个 pdf 文件,当尝试在我的网站上打开它时,它显示文件未找到
- python-3.x - 在python中的while循环后返回
- javascript - 开玩笑抛出 TyperError:使用 lodash 管道/流时需要一个函数
- jenkins - 基本上,我想在构建后生成的 Jenkins 工作区中编辑一个 html 文件。尝试了几个 Jenkins 插件,但没有用
- mule - 如何在节点 js 中执行 CLI 命令?