Comme décrit dans l'article suivant, il faut surcharger le converter et ajouter le code spécifique comme dans l'exemple suivant:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.DateTimeConverter;
public class DateConverter extends DateTimeConverter {
public Date getAsObject(FacesContext context, UIComponent component,
String value) {
if (value == null || "".equals(value)) {
return null;
}
Pattern p1 = Pattern.compile("(0[1-9]|[1-2][0-9]|30|31)/(0[1-9]|1[0-2])");
Matcher m = p1.matcher(value);
if(m.matches()) {
value += "/" + new GregorianCalendar().get(Calendar.YEAR);
}
Pattern p2 = Pattern.compile("(0[1-9]|[1-2][0-9]|30|31)/(0[1-9]|1[0-2])/([0-9]{4})");
Matcher m2 = p2.matcher(value);
if(m2.matches()) {
DateFormat dfm = new SimpleDateFormat("dd/MM/yyyy");
dfm.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
Date res;
try {
res = dfm.parse(value);
} catch (ParseException e) {
// TODO Auto-generated catch block
res = null;
}
return res;
}
return null;
}
public String getAsString(FacesContext context, UIComponent component,
Object value) {
DateFormat dfm = new SimpleDateFormat("dd/MM/yyyy");
dfm.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
return dfm.format(value);
}
}
L'utilisation de ce nouveau converter se fait de la manière suivante:
<ice:selectInputDate id="date3" renderAsPopup="true" styleClass="sldeal" value="#{slbean.endDate}">
<f:converter converterId="icefaces.DateConverter" pattern="dd/MM/yyyy" timeZone="Europe/Paris"/>
</ice:selectInputDate>
Aucun commentaire:
Enregistrer un commentaire