Привязать значение h: selectBooleanCheckbox к int / Integer вместо логического / Boolean - PullRequest
10 голосов
/ 18 апреля 2011

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

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

Ответы [ 2 ]

24 голосов
/ 18 апреля 2011

<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 голосов
/ 15 января 2012

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

...