jeudi 20 octobre 2011

Icefaces selectInputDate : saisie d'une date sous la forme JJ/MM

Afin de mettre en place une zone de saisie permettant de saisir indifféremment une date sous la forme JJ/MM ou JJ/MM/AAAA ou même de saisir la date dans la petite fenêtre popup, avec iceface, il faut utiliser le composant selectInputDate.

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