首页 > 解决方案 > 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]

请问有什么帮助吗?

标签: javajsfprimefaces

解决方案


不确定这是否是您所要求的解决方案,但似乎您正在尝试将您的输入格式化inputNumber为货币并将其值与另一个对象进行比较。double仅在 bean 中存储orBigDecimal值并将其在视图中格式化为货币可能更容易。您可以通过以下方式使用标签的symbolanddecimalPlaces属性实现此目的:<p:inputNumber>

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

希望能帮助到你 :)


推荐阅读