Wiki
Clone wikiOracle JSF Expert 1Z0-896 / Custom converters
Converter interface
javax.faces.convert.Converter
public interface Converter { Object getAsObject(FacesContext context, UIComponent component, String value); String getAsString(FacesContext context, UIComponent component, Object value) }
Implementing the converter interface using @FacesConverter
@FacesConverter("userConverter") public class UserConverter implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String newValue) { if (somethingHasGoneWrong) { FacesMessage msg = new FacesMessage("Conversion error!", "Something went wrong"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ConverterException(msg); } return new User(newValue); } @Override public String getAsString(FacesContext context, UIComponent component, Object user) { return ((User) user).getFirstName(); } }
<h:outputText value="#{userBean.user}"> <f:converter converterId="userConverter" /> </h:outputText>
<h:outputText value="#{userBean.user}" converter="userConverter" />
Implementing the converter interface using faces-config.xml
public class UserConverter implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String newValue) { if (somethingHasGoneWrong) { FacesMessage msg = new FacesMessage("Conversion error!", "Something went wrong"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ConverterException(msg); } return new User(newValue); } @Override public String getAsString(FacesContext context, UIComponent component, Object user) { return ((User) user).getFirstName(); } }
<converter> <description> Converter for User numbers that normalizes the input to a standard format </description> <!-- if applied instead of converter-id then it applies to ALL User instances <converter-for-class>com.example.User</converter-for-class> --> <converter-id>userConverter</converter-id> <converter-class> com.example.UserConverter </converter-class> </converter>
<h:outputText value="#{userBean.user}"> <f:converter converterId="userConverter" /> </h:outputText>
<h:outputText value="#{userBean.user}" converter="userConverter" />
Override message coming from converter
<h:outputText value="#{userBean.user}" converter="userConverter" converterMessage="Something went REALLY wrong!" />
NB: faces-config.xml overrides any @FacesConverter
Updated