【发布时间】:2019-10-28 13:27:47
【问题描述】:
我使用 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) 在 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]。
有什么帮助吗?
【问题讨论】:
-
调试时调用
formatForPlugin(String valueToRender, InputNumber inputNumber, Object value),valueToRender变量的内容是什么?它不能包含“,”作为十进制分隔符which is what you likely did。你为什么要扩展ValueExpression? -
我找不到方法
formatForPlugin,我扩展了ValueExpression,因为我认为PrimeFaces 需要ValueExpression才能在EL 中使用它。我正在尝试将其删除...似乎正在调用toString()以获取其值。 -
#{myBean.myAmount}is 已经是一个 valueExpression,即使字段myAmount只是简单的 String、Integer、Double、BigDecimal 或其他类型。您不需要扩展 ValueExpression。 -
@Selaron 如何知道
MyCurrency类中的 value 属性是什么?谢谢。 -
#{myBean.myAmount.value}是指向字段value的值表达式。
标签: java jsf primefaces