Есть ли простой способ превратить пустые формы ввода в пустые строки в Spring MVC? - PullRequest
19 голосов
/ 05 июня 2010

Я использую Spring MVC и SimpleJdbcInsert для вставки объектов в базу данных MySQL. Я хотел бы установить пустой ввод NULL в базе данных, а не ''. У меня довольно много полей, и я надеюсь найти способ сделать это, не проверяя вручную каждое значение.

Спасибо!


UPDATE

Так что я идиот. Несколько ошибок с моей стороны заставили меня поверить, что правильные ответы ниже не верны. Я написал бы PropertyEditorSupport так:

class StringEditor extends PropertyEditorSupport {

    public void setAsText(String text) {
        String value = text.trim();
        if ("" == value) {
            setValue(null);  
        } else {  
            setValue(value);  
        }
    }

}  


Есть две проблемы:

  1. нет getAsText, поэтому моя форма заполнялась "нулевыми" строками!
  2. моя проверка на равенство - это C ++, а не Java. Когда я попробовал рекомендуемый сеттер, я только что перезагрузил пост, который уже содержал "ноль" строки. Как только я все это почистил, все заработало.

Спасибо за помощь и извините за мою "ошибку оператора"!

Brett

Ответы [ 4 ]

50 голосов
/ 05 июня 2010

Класс, который вы ищете:

org.springframework.beans.propertyeditors.StringTrimmerEditor

Если вы создадите его с true, он преобразует пустые / пробельные строки в ноль. Как его зарегистрировать в подшивке, зависит от того, хотите ли вы, чтобы оно было по умолчанию или относилось только к определенным представлениям.

например, на одном контроллере вы можете просто добавить

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

инструкции здесь

9 голосов
/ 05 ноября 2013

Я знаю, что это старо, но я потратил впустую около 2 или 3 часов, пока не нашел очень простой способ применения StringTrimmerEditor со связующим веществом для всех моих контроллеров.

Еще раз: я должен запомнить RTFM.

Весной 3.2 вы можете создать класс контроллера, не помеченный как @ControllerAdvice, и использовать метод, помеченный как @InitBinder, как в примере с @Affe.

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-initbinder-advice

Вот пример:

@ControllerAdvice
@Controller
public class AppBindingInitializer {

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

}

Надеюсь, это кому-нибудь поможет.

2 голосов
/ 05 июня 2010

Возможно, вы можете использовать пользовательский Binder

0 голосов
/ 05 июня 2010

Установите значение по умолчанию для ваших дополнительных полей в NULL - на самом деле это не NULL по умолчанию?

Разобрать вашу входную строку и затем явно указать только заполненные столбцы с

 usingColumns

о, и я бы посоветовал всегда дезинфицировать ваши входные данные ...

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