Я использую JSF 2.0 и хочу заполнить selectOneMenu значениями моего Enum. Простой пример:
// Sample Enum
public enum Gender {
MALE("Male"),
FEMALE("Female");
private final String label;
private Gender(String label) {
this.label = label;
}
public String getLabel() {
return this.label;
}
}
К сожалению, я не могу использовать Seam для моего текущего проекта, у которого был хороший тег <s:convertEnum/>
, который выполнял большую часть работы.
В Seam, чтобы использовать значения Enum, мне пришлось написать следующую разметку (и создать factory, который предоставляет #{genderValues}
:
<!-- the Seam way -->
<h:selectOneMenu id="persongender" value="#{person.gender}">
<s:selectItems var="_gender" value="#{genderValues}"" label="#{_gender.label}"/>
<s:convertEnum/>
</h:selectOneMenu>
В результате я не должен явно объявлять значения Enum внутри разметки. Я знаю, что это не так просто в JSF < 2.0, но есть ли какие-либо новые возможности в JSF2 для решения этой проблемы? Или Weld помогает здесь как-то? Если в JSF2 нет ничего нового, какой самый простой способ сделать это в JSF 1.2?
Или я могу интегрировать тэг Seam JSF и соответствующие классы Seam для получения той же функции в JavaEE6-приложении (без контейнера Seam)?