NumberFormatException с пользовательским типом для InputNumber простых лиц - PullRequest
1 голос
/ 28 октября 2019

Я создал своего рода тип для проекта JSF, используя PrimeFaces . Я бы использовал этот тип с PrimeFaces inputNumber , но я получаю ошибку:

NumberFormatException class 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 (InputNumberRumber): 292) по адресу org.primefaces.component.inputnumber.InputNumberRenderer.encodeScript (InputNumberRenderer.java:231) по адресу org.primefaces.component.inputnumber.InputNumberRenderer.encodeEnd (InputNumberRenderer.java:120 * * 101 * 100 * 100)Короче говоря, я создал класс 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);
        }

    }
}

И в моем бине у меня есть свойство с типом MyCurrency.

Когда я использую его с inputNumber:

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

Я получаю ошибку [NumberFormatException].

Любая помощь, пожалуйста?

1 Ответ

3 голосов
/ 29 октября 2019

Не уверен, что это решение для того, о чем вы спрашиваете, но, похоже, вы пытаетесь отформатировать ввод вашей inputNumber в качестве валюты, сравнивая ее значение с другим объектом. Может быть проще сохранить только значение double или BigDecimal в вашем компоненте и отформатировать его в виде валюты. Вы можете добиться этого, используя свойства symbol и decimalPlaces тега <p:inputNumber> следующим образом:

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

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...