Я установил веб-приложение 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);
}
}