public class GenericEnumConverter extends Object implements Converter
UISelectMany
components whose value is been bound to a
List<E>
property where E
is an enum. Even though JSF has already a built-in
EnumConverter
, this doesn't work for a List<E>
property as the generic type information
E
is lost during runtime. The list would be filled with unconverted String
values instead
which may in turn cause ClassCastException
.
If replacing the List<E>
property by a E[]
(e.g. Role[]
in case of a
Role
enum) is not an option due to design restrictions (e.g. JPA @ElementCollection
, etc),
then you'd need to create an explicit converter for the enum type like follows:
@FacesConverter("roleConverter") public class RoleConverter extends EnumConverter { public RoleConverter() { super(Role.class); } }
However, creating a new converter for every single enum type, only and only for use in UISelectMany
with a
List<E>
property, may be a bit clumsy. This generic enum converter is intended to remove the need
to create a new enum converter every time.
This converter is available by converter ID omnifaces.GenericEnumConverter
. Basic usage example:
<h:selectManyCheckbox value="#{bean.selectedEnums}" converter="omnifaces.GenericEnumConverter"> <f:selectItems value="#{bean.availableEnums}" /> </h:selectManyCheckbox>
Constructor and Description |
---|
GenericEnumConverter() |
Modifier and Type | Method and Description |
---|---|
Object |
getAsObject(FacesContext context,
UIComponent component,
String submittedValue) |
String |
getAsString(FacesContext context,
UIComponent component,
Object modelValue) |
public String getAsString(FacesContext context, UIComponent component, Object modelValue)
getAsString
in interface Converter
public Object getAsObject(FacesContext context, UIComponent component, String submittedValue)
getAsObject
in interface Converter