NumberFormatException,在Primefaces的InputNumber上具有自定义类型

问题描述 投票:1回答:1

我已经使用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]

需要任何帮助吗?

java jsf primefaces
1个回答
0
投票

[不确定这是否是您要解决的问题,但是您似乎正在尝试将inputNumber的输入格式设置为货币,并将其值与另一个对象进行比较。在您的bean中只存储doubleBigDecimal值并在视图中将其格式化为货币可能会更容易。您可以使用symbol标记的decimalPlaces<p:inputNumber>属性来实现此目的:

<p:inputNumber id="importoDa" value="#{myBean.myAmount}" symbol="$" decimalPlaces="2" />

希望有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.