JSF fornisce una serie di converters standard che coprono l'esigenza della conversione per tutti i tipi base del linguaggio Java quali Byte, Character, Integer, Short, Double, Float, Long BigDecimal, BigInteger, Boolean Character.
Ci sono diversi modi di utilizzare i Converters in JSF, uno di questi è utilizzarlo come attributo di un campo di input o di output ad esempio:
<h:outputText value="#{personeList.codiceFiscale}" converter="codice"/>
Tuttavia possiamo utilizzare il tag <f:converter> innestato nel tag del componente al quale si riferisce nel seguente modo:
<h:outputText value="#{personeList.codiceFiscale}"> <f:converter converterId="codice"/> </h:outputText>
Il converter deve essere dichiarato nel faces-config.xml: <converter> <converter-id>cap</converter-id> <converter-class>it.converters.codice</converter-class> </converter>
Un convertitore è una classe che implementa l'interfaccia javax.faces.convert.Converter che definisce i metodi
public Object getAsObject(FacesContext facesContext,UIComponent uIComponent, String string)
throws ConverterException;
public String getAsString(FacesContext facesContext,UIComponent uIComponent, Object object)
throws ConverterException;
ecco un esempio di un BighdecimalConverter.java:
public class BigDecimalConverter implements Converter {
BigDecimal number = BigDecimal.ZERO;
public Object getAsObject(FacesContext context, UIComponent component, String value)
{
//if (StringUtils.isEmpty(value)){ return null;}
if (StringUtils.isEmpty(value)){ return number;}
String newValue=StringUtils.remove(value,".").replace(',', '.');
try{
number = new BigDecimal(newValue.trim());
}
catch(Exception e )
{
number=BigDecimal.ZERO;
}
return number;
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.ITALY);
if(!StringUtils.isEmpty((value.toString())))
{
/* double dValue =new BigDecimal(value.toString()).doubleValue();
String newValue = n.format(dValue);*/
String newValue = n.format(value);
newValue= StringUtils.remove(newValue,"\u20AC");
return StringUtils.remove(newValue,' ');
}
else
{
return "0,00";
}
}
public String toString()
{
return "0,00";
}
}