Bon, pour résoudre une fois pour toute ce satané problème de struts et de date, voici ce que j'utilise pour ma part :
Dans un premier temps, un Converter :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| package bla.bla.bla.utils;
import java.text.ParseException;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DateConverter implements Converter {
private static final Log logger = LogFactory.getLog(DateConverter.class);
private Object defaultValue = null;
public DateConverter() {
this.defaultValue = null;
}
public DateConverter(Object defaultValue) {
this.defaultValue = defaultValue;
}
public Object convert(Class type, Object value) {
if (value == null) {
return (defaultValue);
}
if (value instanceof Date) {
return (value);
}
try {
return WrapperUtil.toDate(value.toString());
} catch (ParseException e) {
logger.debug("Unable to convert " + value + " into Date format.");
return defaultValue;
}
}
} |
La classe WrapperUtil contiends une méthode statique assurant le formatage et le parsing selon un pattern configurable, j'utilise spring pour injecter le pattern en général...
Une fois ce Converter écris et testé (sisi...) l'ajouté à la table des converters utilisés par les BeanUtils grace à un plug-in struts.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package bla.bla.bla.struts.plugin;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import bla.bla.bla.DateConverter;
public class StrutsBootstrapPlugin implements PlugIn{
public void destroy() {
}
public void init(ActionServlet actionServlet, ModuleConfig moduleConfig) throws ServletException {
ConvertUtils.register(new DateConverter(), java.util.Date.class);
}
} |
Il ne reste plus qu'à ajouter ce plug-in au fichier de config de struts (struts-config.xml) avec la ligne suivante :
<plug-in className="bla.bla.bla.struts.plugin.StrutsBootstrapPlugin" />
Voilà, il n'en faut pas plus pour que Struts sache convertir définitivement de lui- même les String en Date lors de la population des formBean
A ajouter à la faq si possible
Partager