Bind h: selectBooleanCheckbox значение для int/Integer вместо boolean/Boolean

У меня есть <h:selectBooleanCheckbox value="#{someBean.prop}">, где prop - свойство типа int. Разве это действительно не работает сразу? Должен ли я реализовать собственный конвертер для преобразования Boolean в int? Есть ли у кого-нибудь код конвертера для этого? Я прочитал, что в JSF 2.0 есть некоторая ошибка, которая предотвращает обработку преобразователей для <h:selectBooleanCheckbox>. Может ли кто-нибудь подтвердить это?

Я использую MyFaces 2, Tomahawk и Tomcat 6.

Ответ 1

<h:selectBooleanCheckbox> должен, как сказано в его названии, быть связан с boolean или Boolean свойством. Ничего больше. То, что он допускает атрибут converter самом деле является ошибкой в спецификации. Это никогда не должно было позволять это.

Проблема больше в вашей модели, почему вы используете int для представления логического состояния? Измените свою модель, чтобы она была полностью boolean.

Если по какой-то причине изменение модели не подходит (сторонний API, глупый архитектор, или глупые бизнес-ограничения и т.д.), Поместите получатель/установщик модели в компонент поддержки следующим образом.

public boolean isChecked() {
    return someModel.getSomeInt() != 0;
}

public void setChecked(boolean checked) {
    someModel.setSomeInt(checked ? 1 : 0);
}

и вместо этого используйте его как <h:selectBooleanCheckbox value="#{bean.checked}"/>.

Ответ 2

просто сказать, что MySQL не имеет логического значения в качестве выбора типа поля, и это может быть примером для этой потребности.

Ответ 3

Вы можете установить поле как tinyint в MySQL. На самом деле проблема заключается в получении имени метода при создании логической переменной. Используйте имя метода getChecked() вместо isChecked().