Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Странное поведение @InitBinder-а / 1 сообщений из 1, страница 1 из 1
17.09.2012, 18:10:58
    #37960963
mesier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение @InitBinder-а
Жил-поживал в @InitBinder-е контроллера Спринга кастомный эдитор StringTrimmerEditor.
Задача его очевидно угадывается по названию класса - отсекать пред- и пост-пробелы в строковых данных, приходящих в реквесте.
И вот столкнулись мы с проблемой, когда массив длиной более 256 элементов, приходящий в реквесте, перестал байндиться на объект модели типа List, кидая IndexOutOfBoundsException.. Проблема нечастая, но оказывается Гугль знает и про нее !
Очевидный же шаг, не так ли - добавить этот кастомный параметр в @InitBinder:

Код: java
1.
2.
3.
4.
5.
@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    binder.setAutoGrowCollectionLimit(1000);
}



Но... Не работает!
Выношу установку параметра в отдельный метод, объявленный с аннотацией @InitBinder:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@InitBinder
public void initStringBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

@InitBinder
public void initListBinder(WebDataBinder binder) {
    binder.setAutoGrowCollectionLimit(1000);
}



Спринг это допускает, но опять не работает..
И, наконец, в процессе проб всего и вся, удалений, замены типа binder-а в параметре метода, так как-то случайно получилось, что я переставил местами эти методы, и КОД ЗАРАБОТАЛ!!! О_о
То есть буквально вот так, в таком порядке следования методов в классе:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@InitBinder
public void initListBinder(WebDataBinder binder) {
    binder.setAutoGrowCollectionLimit(1000);
}

@InitBinder
public void initStringBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}



- работает, а наоборот (код выше) - не работает.

Попробовал и в одном методе.. Как в самом первом куске кода в этом сообщении - не работает, а строки кода в методе местами поменяешь - работает.

Что это?? Баг Спринга или я что-то не понимаю, не так делаю?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Странное поведение @InitBinder-а / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]