Это кажется возможным преодолеть. То есть вы хотите, чтобы удобочитаемый форматировщик отображал пользователю да / нет для логических значений в модели. Но вы все еще хотите, чтобы элементы HTML флажка работали, и кажется, что эти элементы флажка HTML / виджеты / теги JSP ожидают, что будет использоваться строка истина / ложь (или логический тип Java), и не использует конвертер для получения произвольного Строка yes / no возвращается к логическому типу.
Эта проблема для меня проявляется в том, что начальное состояние флажка никогда не ставится, когда в модели установлено значение Boolean.TRUE. Это означает, что любое чтение-изменение-обновление записи (без редактирования это поле заканчивается переходом из «истинного» в «ложное», когда оно не было изменено пользователем). Это связано с тем, что начальное состояние в пользовательском интерфейсе несовместимо с моделью (оно всегда показывает непроверенное, то есть ложное состояние), даже когда модель является истинным состоянием. Отображаемое значение имеет не отмеченный флажок на экране записи редактирования HTML, даже если для модели задано значение Boolean.TRUE для этого значения. Это связано с тем, что «да» не интерпретируется как «true» элементами HTML-флажков, и по умолчанию оно равно false (так как это логическое значение по умолчанию).
Итак, определите ваш форматтер / конвертер (как вы уже делаете). Но в свой @Controller добавьте:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Boolean.class, "friesWithThat", new CustomBooleanEditor(false));
}
Похоже, что отображаемое значение строки продолжает оставаться да / нет, но значение, используемое и переданное элементу HTML-флажка, остается истинным / ложным.
Теперь при редактировании / обновлении записи (в CRUD) исходное состояние флажка согласуется с моделью, и сохранение данных (без редактирования каких-либо полей) не изменяет состояние флажка (как я понимаю проблему, с которой вы столкнулись). есть).
Итак, из этого, я думаю, мы можем понять, что конвертеры / форматеры предназначены для общего отображения данных, а PropertyEditors - для отображения данных модели таким образом, чтобы данные требовались виджету пользовательского интерфейса.