我已经使用PrimeFaces在JSF项目上创建了一种自定义类型。我会将此类型与PrimeFaces的inputNumber一起使用,但出现错误:
NumberFormatException类java.lang.NumberFormatExceptionjava.lang.NumberFormatException在java.math.BigDecimal。(BigDecimal.java:550)在java.math.BigDecimal。(BigDecimal.java:383)在java.math.BigDecimal。(BigDecimal.java:806)在org.primefaces.component.inputnumber.InputNumberRenderer.formatForPlugin(InputNumberRenderer.java:292)在org.primefaces.component.inputnumber.InputNumberRenderer.encodeScript(InputNumberRenderer.java:231)在org.primefaces.component.inputnumber.InputNumberRenderer.encodeEnd(InputNumberRenderer.java:124)
总之,我已经创建了一个类MyCurrency
,它存储了double
并且扩展了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中,我有一个类型为MyCurrency
的属性。
当我将其与inputNumber一起使用时:
<p:inputNumber id="importoDa" value="#{myBean.myAmount}" />
我收到错误[NumberFormatException]
。
需要任何帮助吗?
[不确定这是否是您要解决的问题,但是您似乎正在尝试将inputNumber
的输入格式设置为货币,并将其值与另一个对象进行比较。在您的bean中只存储double
或BigDecimal
值并在视图中将其格式化为货币可能会更容易。您可以使用symbol
标记的decimalPlaces
和<p:inputNumber>
属性来实现此目的:
<p:inputNumber id="importoDa" value="#{myBean.myAmount}" symbol="$" decimalPlaces="2" />
希望有帮助:)