Ввод JSF не удвоил ошибку преобразования - PullRequest
5 голосов
/ 31 октября 2011

У меня есть приложение JSF2, которое использует Spring 3.0. У меня есть бин, который имеет свойство типа List<Double> с 5 элементами:

public class MyBean {
    private List<Double> values; 
    public List<Double> getValues() {
        if (values == null) {
            values = new ArrayList<Double>(5);
                for (int i = 0; i < 5; i++) {
                    values.add(null);
                }
        }
        return values;
    }
    public void setValues(List<Double> values) {
        this.values = values;
    }
}

В моем файле xhtml у меня есть это для каждого элемента:

<h:inputText id="value1" value="#{myBean.values[0]}">
    <f:convertNumber pattern="#########0.##" />
</h:inputText>

Моя цель - получить значения как ArrayList. Также я не хочу сохранять индивидуальные свойства для каждого участника. Будущее требование сделает общее число значения динамическим (не жестко запрограммированным 5), поэтому я могу использовать цикл для определения входных данных для каждого элемента, но сейчас не будем на этом фокусироваться.

Так вот в чем проблема. Когда я отправляю страницу, преобразование не является правильным. Например, если мой ввод был 1, 2.0, 3 (и 2 пустых ввода для двух последних элементов, они не являются обязательными), я получаю следующий массив [1, "2.0", 3, "", ""]] где 1 и 3 имеют тип BigDecimal, а 2.0 и последние 2 члена являются пустыми строками. Это вызывает ClassCastexception каждый раз, когда я пытаюсь получить член списка массивов, потому что по определению является универсальным, а универсальный тип - Double. BigDecimal нельзя привести к Double; очевидно, что попытки приведения строки также не будут выполнены. Теперь я ожидал, что по крайней мере все члены будут преобразованы конвертером и будут одного типа. Кроме того, мне нужен способ, чтобы получить правильный как двойной. Я также попробовал следующее:

<h:inputText id="value1" value="#{myBean.values[0]}">
    <f:converter id="javax.faces.Double" />
</h:inputText>

но это вызвало исключение:

<f:converter> Default behavior invoked of requiring a converter-id passed in the constructor, must override ConvertHandler(ConverterConfig)

Я должен признать, что я новичок в технологии JSF, но что касается этой статьи , не было необходимости что-либо переопределять. Любая помощь будет оценена

1 Ответ

13 голосов
/ 31 октября 2011

У <f:converter> нет атрибута id, вместо этого converterId.См. Также документацию по тегу .Таким образом, это должно сделать:

<h:inputText id="value1" value="#{myBean.values[0]}">
    <f:converter converterId="javax.faces.Double" />
</h:inputText>

или даже

<h:inputText id="value1" value="#{myBean.values[0]}" converter="javax.faces.Double" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...