Рассмотрим интернационализацию enum-ов на примере emun-а Gender (пол). В ресурсном файле определим перевод следующим образом:
gender.MALE=Мужчина
gender.FEMALE=Женщина
Определим непосредсвенно enum:
package ru.mugitus.myproject.model;
public enum Gender {
MALE,
FEMALE;
}
Создадим класс EnumFactory, который послужит фабрикой для создания объектов enum, зарегистрированных в контексте Seam:
package ru.mugitus.factory;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Scope;
@Scope(ScopeType.APPLICATION)
public class EnumFactory60;E extends Enum60;E62;62; {
private Class60;E62; enumClass;
public E[] getValues() {
return enumClass.getEnumConstants();
}
public Class60;E62; getEnumClass() {
return enumClass;
}
public void setEnumClass(Class60;E62; enumClass) {
this.enumClass = enumClass;
}
public E valueOf(String literal) {
return Enum.valueOf(enumClass, literal);
}
public String getValue(String literal) {
return Messages.instance().get(this.getClass().getAnnotation(Name.class).value().split("\\.")[1] + "." + literal);
}
}
Как видно, наш класс находится в пакете ru.mugitus.factory. Разместим в этом же пакете файл с названием package-info.java со следующим содержимым:
@Namespace(value="http://mugitus.ru/factory", prefix="ru.mugitus.factory")
package ru.mugitus.factory;
import org.jboss.seam.annotations.Namespace;
Это позволит нам определять компоненты на основе enum в файле components.xml. Только для этого нам надо принять за правило называть все компоненты(enum) с префиксом enum:
<components xmlns="http://jboss.com/products/seam/components" xmlns:mug="http://mugitus.ru/factory">
...
<mug:enum-factory name="enum.gender" enum-class="ru.mugitus.myproject.model.Gender"/>
...
</components>
Теперь используем наш enum на xhtml-странице, например в выпадающем списке:
<h:selectOneMenu value="#{myBean.gender}">
<s:selectItems var="gender" value="#{enum.gender.values}" label="#{enum.gender.value(gender.name())}"/>
<s:convertEnum/>
</h:selectOneMenu>