@Retention(value=RUNTIME) @Target(value={TYPE,FIELD,METHOD,PARAMETER}) @Inherited @Qualifier public @interface FacesConverter
The presence of this annotation
on a class automatically registers the class with the runtime as a
Converter
. The value of the value()
attribute is
taken to be converter-id, the value of the forClass()
attribute is taken to be converter-for-class and the fully
qualified class name of the class to which this annotation is
attached is taken to be the converter-class. The
implementation must guarantee that for each class annotated with
FacesConverter
, found with the algorithm in section
JSF.11.5, the proper variant of
Application.addConverter()
is called. If
converter-id is not the empty string, Application.addConverter(java.lang.String,java.lang.String)
is called, passing the derived converter-id as the first
argument and the derived converter-class as the second
argument. If converter-id is the empty string, Application.addConverter(java.lang.Class,java.lang.String)
is called, passing the converter-for-class as the first
argument and the derived converter-class as the second
argument. The implementation must guarantee that all such calls to
addConverter()
happen during application startup time
and before any requests are serviced.
The preceding text contains an important
subtlety which application users should understand. It is not
possible to use a single @FacesConverter
annotation to
register a single Converter
implementation both in the by-class
and the by-converter-id
data structures. One way
to achieve this result is to put the actual converter logic in an
abstract base class, without a @FacesConverter
annotation,
and derive two sub-classes, each with a @FacesConverter
annotation. One sub-class has a value
attribute but no
forClass
attribute, and the other sub-class has the converse.
Please see the ViewDeclarationLanguage documentation for <h:selectManyListBox>
for another important subtlety regarding
converters and collections.
Modifier and Type | Optional Element and Description |
---|---|
java.lang.Class |
forClass
The value of this annotation
attribute is taken to be the converter-for-class with
which instances of this class of converter can be instantiated by
calling |
boolean |
managed
The value of this annotation attribute is taken to be an indicator that flags whether or not the given converter is a CDI managed converter. |
java.lang.String |
value
The value of this annotation
attribute is taken to be the converter-id with which
instances of this class of converter can be instantiated by
calling |
public abstract java.lang.String value
The value of this annotation
attribute is taken to be the converter-id with which
instances of this class of converter can be instantiated by
calling Application.createConverter(java.lang.String)
.
public abstract java.lang.Class forClass
The value of this annotation
attribute is taken to be the converter-for-class with
which instances of this class of converter can be instantiated by
calling Application.createConverter(java.lang.Class)
.