Inject support in Converter, Validator and Behavor
In JSF 2.3, Converter, Validator and Behavior are refactored to generic interfaces.
Have a look at the Converter interface.
public interface Converter<T> {
public T getAsObject(FacesContext context, UIComponent component,
String value);
public String getAsString(FacesContext context, UIComponent component,
T value);
}
And these interfaces also support @Inject and also can be injected into other beans, which are originally planned in JSF 2.2, but delayed to be implemented in JSF 2.3.
Let's create a simple sample to taste it. TagsConverter is used to convert tag string to a tag list in backing bean.
managed = true indicates the converter is a CDI managed converter.
To demonstrate @Inject supports in Converter, I extracted the conversion handling process into a CDI bean ConverterUtils, and inject it in TagsConverter.
@ApplicationScoped
public class ConverterUtils {
@Inject
Logger LOG;
public String listToString(List<String> value) {
LOG.log(Level.INFO, "listToString:{0}", value);
return value != null ? join(",", value) : "";
}
public List<String> stringToList(String value) {
LOG.log(Level.INFO, "stringToList:{0}", value);
return value != null ? Arrays.asList(value.split(",")) : Collections.<String>emptyList();
}
}
Now you can apply this converter on an input field in a facelets template.