Флажок Spring Тег JSP не работает при использовании Converter для типа Boolean

Я установил веб-приложение CRUD с Spring Roo и Spring MVC. Моя проблема: поскольку я использую конвертер для локализации отображения логических значений, флажок Spring JSP Tag не работает, что означает, что флажки не принимают реальное значение из вспомогательных компонентов. Они всегда ложны и не проверяются.

Я провел некоторое исследование и, вероятно, нашел ошибку в методе writeTagDetails метода org.springframework.web.servlet.tags.form.CheckboxTag . Вот интересная часть этого метода:

// the concrete type may not be a Boolean - can be String
if (boundValue instanceof String) {
    boundValue = Boolean.valueOf((String) boundValue);
}
Boolean booleanValue = (boundValue != null ? (Boolean) boundValue : Boolean.FALSE);
renderFromBoolean(booleanValue, tagWriter);

Поскольку я использую конвертер для отображения да / нет вместо истины / ложь, boundValue представляет собой строку, а вызов Boolean.valueOf всегда приводит к ложному результату, потому что метод valueOf не знает об используемом Spring Converter и интерпретирует да / нет как false.

Как я могу решить эту проблему с помощью Spring? Кто-нибудь знает? Мой мозг зашел в тупик.

Для полноты: конвертер для логического типа работает, как ожидалось (код см. Ниже).

public class BooleanConverter implements Converter<Boolean,String>, Formatter<Boolean> {

@Autowired
private MessageSource messageSource;

@Override
public String print(Boolean object, Locale locale) {
    return (object)
            ? messageSource.getMessage("label_true", null, LocaleContextHolder.getLocale())
            : messageSource.getMessage("label_false", null, LocaleContextHolder.getLocale());
}

@Override
public String convert(Boolean source) {
    return this.print(source, null);
}
}
5
задан Felix 4 July 2011 в 19:51
поделиться